স্টোর এক্সপ্রেশনটিতে পদ্ধতিটি অনুবাদ করা যায় না


89

আমি এই কোডটি লিনকিউ-এর সাথে এসকিউএল-তে কাজ করতে দেখেছি কিন্তু যখন আমি সত্তা ফ্রেমওয়ার্ক ব্যবহার করি তখন এটি এই ত্রুটিটি ছুঁড়ে দেয়:

সংস্থাগুলি থেকে লিনকিউ 'সিস্টেম.লিনক.আইকোয়্যারেবল '1 [মাইপ্রজেক্ট.মোডেলস.কমিনিউটি ফিচারস] গেটকমিনিউটি ফিচারস ()' পদ্ধতিটি স্বীকৃতি দেয় না এবং এই পদ্ধতির কোনও স্টোর এক্সপ্রেশন হিসাবে অনুবাদ করা যায় না `'

সংগ্রহস্থল কোডটি হ'ল:

public IQueryable<Models.Estate> GetEstates()
{
    return from e in entity.Estates
           let AllCommFeat = GetCommunityFeatures()
           let AllHomeFeat = GetHomeFeatures()
           select new Models.Estate
                      {
                                EstateId = e.EstateId,
                                AllHomeFeatures = new LazyList<HomeFeatures>(AllHomeFeat),
                                AllCommunityFeatures = new LazyList<CommunityFeatures>(AllCommFeat)
                      };
}

public IQueryable<Models.CommunityFeatures> GetCommunityFeatures()
{
    return from f in entity.CommunityFeatures
           select new CommunityFeatures
                      {
                          Name = f.CommunityFeature1,
                          CommunityFeatureId = f.CommunityFeatureId
                      };
}

public IQueryable<Models.HomeFeatures> GetHomeFeatures()
{
    return from f in entity.HomeFeatures
           select new HomeFeatures()
           {
               Name = f.HomeFeature1,
               HomeFeatureId = f.HomeFeatureId
           };
}

LazyList একটি তালিকা যা আইকিউয়েরেবলের শক্তি প্রসারিত করে।

এই ত্রুটি কেন ঘটে কেউ ব্যাখ্যা করতে পারে?

উত্তর:


115

কারণ: ডিজাইন অনুসারে, লিনকিউ থেকে সত্তাগুলির জন্য পুরো লিনকিউ ক্যোয়ারী এক্সপ্রেশনটি একটি সার্ভার ক্যোয়ারিতে অনুবাদ করা দরকার। ক্যোরির অনুবাদ হওয়ার আগে ক্লায়েন্টের কাছে কেবল কয়েকটি অনিয়ন্ত্রিত সুব এক্সপ্রেসনস (কোয়েরির এক্সপ্রেশন যা সার্ভারের ফলাফলের উপর নির্ভর করে না) ক্লায়েন্টের উপর মূল্যায়ন করা হয়। এক্ষেত্রে গেটহোমফিটচার্স () এর মতো পরিচিত অনুবাদ নেই এমন স্বেচ্ছাসেবী পদ্ধতির অনুরোধগুলি সমর্থিত নয়।
আরও সুনির্দিষ্ট হওয়ার জন্য, লিনক টু সত্তা কেবলমাত্র প্যারামিটারলেস কনস্ট্রাক্টর এবং ইনিশিয়ালাইজারকে সমর্থন করে ।

সমাধান: অতএব, এই ব্যতিক্রমটি পেতে আপনাকে আপনার সাব- কোয়েরিকে গেটকমিনিউটি ফিচারস () এবং গেটহোম ফিচারস () এর প্রধান একটিতে মার্জ করতে হবেলিনকিউ কোয়েরি থেকে সরাসরি পদ্ধতিতে অনুরোধ করার পরিবর্তে এছাড়াও, লাইন একটি বিষয় যে আপনি একটি নতুন দৃষ্টান্ত instantiate করার চেষ্টা করছিলেন হয় LazyList , তার স্থিতিমাপ কনস্ট্রাকটর ব্যবহার ঠিক যেমন আপনি পারে করছেন এসকিউএল LINQ । তার জন্য সমাধানটি লাইনকিউ ক্যোয়ারীগুলির ক্লায়েন্ট মূল্যায়নে (লিনকিউ টু অবজেক্টস) স্যুইচ করা হবে। এটির জন্য আপনাকে LZLList কনস্ট্রাক্টরকে কল করার আগে আপনার লাইনকিউ সত্তা কোয়েরিগুলির কাছে সংখ্যক পদ্ধতিটি আহ্বান করা প্রয়োজন।

এর মতো কিছু কাজ করা উচিত:

public IQueryable<Models.Estate> GetEstates()
{
    return from e in entity.Estates.AsEnumerable()
       let AllCommFeat = from f in entity.CommunityFeatures
                         select new CommunityFeatures {
                             Name = f.CommunityFeature1,
                             CommunityFeatureId = f.CommunityFeatureId
                         },
       let AllHomeFeat = from f in entity.HomeFeatures
                         select new HomeFeatures() {
                             Name = f.HomeFeature1,
                             HomeFeatureId = f.HomeFeatureId
                         },
       select new Models.Estate {
            EstateId = e.EstateId,
            AllHomeFeatures = new LazyList<HomeFeatures>(AllHomeFeat),
            AllCommunityFeatures = new LazyList<CommunityFeatures>(AllCommFeat)
       };
}


আরও তথ্য: লিনকিউ থেকে সত্তা থেকে দয়া করে একবার দেখুন , কী সমর্থিত নয়? আরও তথ্যের জন্য. এছাড়াও চেক আউট কি সমর্থিত নয় সত্ত্বা, সমাধান নীচে উপস্থিত থেকে LINQ সম্ভাব্য সমাধান উপর বিস্তারিত আলোচনা জন্য। (উভয় লিঙ্কই ক্যাশেড সংস্করণ কারণ আসল ওয়েবসাইটটি নিচে রয়েছে)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.