লিনক ক্যোয়ারী "ধরণের ধরণের সিস্টেম.অবজেক্টের ধ্রুবক মান তৈরি করতে অক্ষম ..." কেন ফেলেছে?


94

নিম্নলিখিত কোড নমুনা:

private void loadCustomer(int custIdToQuery) 
    {
        var dbContext = new SampleDB();
        try
        {
            var customerContext = from t in dbContext.tblCustomers      // keeps throwing:
                                   where t.CustID.Equals(custIdToQuery) // Unable to create a constant value of type 'System.Object'. 
                                   select new                           // Only primitive types ('such as Int32, String, and Guid') 
                                   {                                    // are supported in this context.
                                       branchId = t.CustomerBranchID,   //
                                       branchName = t.BranchName        //
                                   };                                   //

            if (customerContext.ToList().Count() < 1) //Already Tried customerContext.Any()
            {
                lstbCustomers.DataSource = customerContext;
                lstbCustomers.DisplayMember = "branchName";
                lstbCustomers.ValueMember = "branchId";
            }
            else
            {
                lstbCustomers.Items.Add("There are no branches defined for the selected customer.");
                lstbCustomers.Refresh();
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {
            dbContext.Dispose();
        }
    }

আমি কী ভুল করছি তা বুঝতে আমি অক্ষম। আমি "" সিস্টেম.অজেক্ট "ধরণের ধ্রুবক মান তৈরি করতে অক্ষম keep

উত্তর:


233

সমান পরিবর্তে == ব্যবহার করুন:

where t.CustID == custIdToQuery

প্রকারগুলি ভুল হলে আপনি দেখতে পাবেন যে এটি সংকলন করে না।


10
আপনি কি দয়া করে "t.CustID == CustIdToQuery" এবং "t.CustID.Equals (CustIdToQuery)" এর মধ্যে পার্থক্যটি ব্যাখ্যা করতে পারেন। অগ্রিম ধন্যবাদ
নীল

4
@Neel দেখে এই প্রশ্নের এ ব্যাখ্যার জন্য মধ্যে পার্থক্য উপর নিন ==এবং .Equals(): stackoverflow.com/questions/814878/...
অ্যালেক্স

২০১১ সালে সলিউশন লজিক কাজ করেছে! অসাধারণ মূল্যবান!
যীশবন্ত মুধোলকর

29

আমি একই সমস্যাটি একটি নাল ইন্টের সাথে ছিল। পরিবর্তে == ব্যবহার করে দুর্দান্তভাবে কাজ করে তবে আপনি যদি ব্যবহার করতে চান তবে সমানভাবে, আপনি এটিকে nallable ভেরিয়েবলের মানের সাথে তুলনা করতে পারেন, তাই

where t.CustID.Value.Equals(custIdToQuery)

9

আমি যখন চেষ্টা করার চেষ্টা করছিলাম তখন আমারও একই সমস্যা ছিল a পরিবর্তে == ব্যবহার দুর্দান্ত কাজ করে। আমার ধারণা এটি কারণ এটি দশমিকের সঠিক "ধরণের" সাথে মেলে না? দশমিক।


4
মনে রাখবেন যে এটি কোনও প্রসঙ্গে রয়েছে IQueryable, তাই এটি নিয়মিত সি # কোডে সংকলিত হয় না। এটি একটি অভিব্যক্তি হয়ে ওঠে যা কোনও ক্যোয়ার সরবরাহকারীকে দেওয়া হয়। এই ক্যোয়ারী সরবরাহকারী ক্যোয়ারির সাথে যা খুশি তা করতে পারে এবং এটি হ্যান্ডেল করতে পারে Equalsএবং ==একই বা নাও করতে পারে।
সার্ভিস করুন

আমি ব্যবহৃত .Equal()তুলনা Int32?সঙ্গে Int32। যেহেতু Int32?এটি ধারণ করার কথা Int32এবং তাই nullআমি ভেবেছিলাম এটি কার্যকর হবে। তবে তা হয়নি। ==কাজ করছে.
ম্যাট্রিক্স

1

আমি একই সমস্যার মুখোমুখি হয়েছি এবং আমি সংগ্রহ অবজেক্টের "User"সাথে পূর্ণসংখ্যার ডেটা টাইপ "userid"( x.User.Equals(userid)) এর সাথে তুলনা করছি

from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.User.Equals(userid))

এবং সঠিক অনুসন্ধান হল x.UserId.Equals(userid)

from user in myshop.UserPermissions.Where(x => x.IsDeleted == false && x.UserId.Equals(userid))

এটি ভিন্ন সমস্যা, আপনি আপেল এবং কমলা তুলনা করছেন।
লাসে ভি কার্লসেন

এটা কিভাবে আলাদা। আমি একই সমস্যার সম্মুখীন হয়েছে যখন। আমি এই উত্তরটি কেবল অন্যদের জন্য রেফারেন্সের জন্য পোস্ট করি।
সতীশ কুমার সোনার

1

আমার ক্ষেত্রে, আমি (sender as Button).Textএকটি টেম্প ভার ব্যবহার করে পরোক্ষ কলের প্রত্যক্ষ কল পরিবর্তন করেছি , কাজ করেছে। কাজের কোড:

private void onTopAccBtnClick(object sender, EventArgs e)
    {
        var name = (sender as Button).Text;
        accountBindingSource.Position =
                    accountBindingSource.IndexOf(_dataService.Db.Accounts.First(ac => ac.AccountName == name));
        accountBindingSource_CurrentChanged(sender, e);
    }

বগি কোড:

private void onTopAccBtnClick(object sender, EventArgs e)
    {
        accountBindingSource.Position =
                    accountBindingSource.IndexOf(_dataService.Db.Accounts.First(ac => ac.AccountName == (sender as Button).Text));
        accountBindingSource_CurrentChanged(sender, e);
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.