আপনি বেনামে টাইপ করতে পারেন, এবং তারপরে এটি থেকে মডেল প্রকারে
public IEnumerable<Product> GetProducts(int categoryID)
{
return (from p in Context.Set<Product>()
where p.CategoryID == categoryID
select new { Name = p.Name }).ToList()
.Select(x => new Product { Name = x.Name });
}
সম্পাদনা : এই প্রশ্নটি যেহেতু যথেষ্ট মনোযোগ পেয়েছে আমি তখন থেকে আরও নির্দিষ্ট হতে চলেছি।
আপনি সরাসরি মডেল প্রকারে (EF বিধিনিষেধ) প্রজেক্ট করতে পারবেন না, সুতরাং এর আশেপাশে কোনও উপায় নেই। একমাত্র উপায় হ'ল বেনামে টাইপ করা (1 ম পুনরুক্তি), এবং তারপরে মডেল প্রকারে (2 য় পুনরাবৃত্তি)।
দয়া করে এও সচেতন হন যে আপনি যখন আংশিকভাবে সত্তাগুলি এই পদ্ধতিতে লোড করেন তখন সেগুলি আপডেট করা যায় না, তাই তাদের যেমন হয় তেমন আলাদা থাকতে হবে।
কেন এটি সম্ভব নয় তা আমি কখনই পুরোপুরি বুঝতে পারি নি এবং এই থ্রেডের উত্তরগুলি এর বিরুদ্ধে দৃ strong় কারণ দেয় না (বেশিরভাগ আংশিক লোড হওয়া ডেটার কথা বলছে)। এটি সঠিক যে আংশিকভাবে লোড হওয়া রাষ্ট্রের সত্তা আপডেট করা যাবে না, তবে তারপরে, এই সত্তাটি আলাদা করা হবে, সুতরাং তাদের সংরক্ষণের জন্য দুর্ঘটনাজনক প্রচেষ্টা সম্ভব হবে না।
আমি উপরে যে পদ্ধতিটি ব্যবহার করেছি তা বিবেচনা করুন: ফলস্বরূপ আমাদের এখনও একটি আংশিক লোড হওয়া মডেল সত্তা রয়েছে। এই সত্তাটি বিচ্ছিন্ন।
এটি (ইচ্ছা থেকে থাকার) সম্ভাব্য কোডটি বিবেচনা করুন:
return (from p in Context.Set<Product>()
where p.CategoryID == categoryID
select new Product { Name = p.Name }).AsNoTracking().ToList();
এটি পৃথক পৃথক সংস্থাগুলির একটি তালিকাতেও ফলস্বরূপ হতে পারে, সুতরাং আমাদের দুটি পুনরাবৃত্তি করার প্রয়োজন হবে না। একটি সংকলক স্মার্ট হবে যে AsNoTracking () ব্যবহার করা হয়েছে, যার ফলে পৃথক পৃথক সংস্থাগুলি তৈরি হবে, সুতরাং এটি আমাদের এটি করার অনুমতি দিতে পারে। তবে, যদি আসনো ট্র্যাকিং () বাদ দেওয়া হয় তবে এটি এখন যেভাবে ছুঁড়েছে একই ব্যতিক্রমটি ছুঁড়ে ফেলতে পারে, আমাদের সতর্ক করতে যে আমরা যে ফলাফলটি চাই তা সম্পর্কে আমাদের যথেষ্ট সুনির্দিষ্ট হওয়া দরকার।