একটি সংগ্রহ ফিল্টার করার জন্য LINQtoObjects উপর লম্বা সঙ্গে একটি এক্সটেনশন পদ্ধতি ব্যবহার করার সময়?

আমি কিছু C# 3 সংগ্রহ ফিল্টার prototyping করছি এবং এই জুড়ে এসেছিল। আমি পণ্য একটি সংগ্রহ আছে:

public class MyProduct
{
    public string Name { get; set; }
    public Double Price { get; set; }
    public string Description { get; set; }
}

var MyProducts = new  List
{            
    new  MyProduct
    {
        Name = "Surfboard",
        Price = 144.99,
        Description = "Most important thing you will ever own."
    },
    new MyProduct
    {
        Name = "Leash",
        Price = 29.28,
        Description = "Keep important things close to you."
    }
    ,
    new MyProduct
    {
        Name = "Sun Screen",
        Price = 15.88,
        Description = "1000 SPF! Who Could ask for more?"
    }
};

এখন যদি আমি LINQ এ ফিল্টার করি তবে এটি আশা করা যায় যে কাজটি করা হচ্ছে:

var d = (from mp in MyProducts
             where mp.Price < 50d
             select mp);

এবং যদি আমি একটি Lambda সঙ্গে এক্সটেনশন পদ্ধতি সংযুক্ত যেখানে ফিল্টার হিসাবে ভাল কাজ করে:

var f = MyProducts.Where(mp => mp.Price < 50d).ToList();

Question: What is the difference, and why use one over the other?

0
ro fr hi

4 উত্তর

LINQ আপনার কোড মত পদ্ধতি কল সক্রিয়।

অন্য কথায়, কোন পার্থক্য থাকা উচিত।

যাইহোক, আপনার দুই টুকরা কোড আপনি কল করা হয় না। প্রথমতে তালিকাভুক্ত করুন, তাই কোড প্রথম অংশ একটি গণনীয় তথ্য উৎস উত্পন্ন হবে, কিন্তু আপনি কল করেন। এটিতে তালিকাভুক্ত, দুই একই হতে হবে।

0
যোগ

ToList পার্থক্য ব্যতীত, # 2 অনেক বেশি পাঠযোগ্য এবং প্রাকৃতিক IMO

0
যোগ

As mentioned d will be IEnumerable while f is List

রূপান্তর C# কম্পাইলার দ্বারা সম্পন্ন হয়

var d = 
    from mp in MyProducts
    where mp.Price < 50d
    select mp;

রূপান্তরিত হয় (সংকলন আগে IL এবং generics প্রসারিত):

var d = 
    MyProducts.
    Where( mp => mp.Price < 50d ).
    Select( mp => mp ); 
    //note that this last select is optimised out if it makes no change

মনে রাখবেন যে এই সহজ ক্ষেত্রে এটি একটু পার্থক্য করে তোলে। Linq সত্যিই মূল্যবান যেখানে অনেক জটিল loops হয়।

উদাহরণস্বরূপ, এই বিবৃতিটি গ্রুপ-বাই, আদেশ এবং কয়েকটি বিবৃতি অন্তর্ভুক্ত করতে পারে এবং এখনও Linq বিন্যাসে পাঠযোগ্য হতে পারে যখন সমতুল্য । পদ্ধতি ()। Method.Method() জটিল হবে।

0
যোগ

আপনি d এর জন্য ব্যবহার করছেন সিনট্যাক্স কম্পাইলার দ্বারা এক্সটেনশন পদ্ধতি হিসাবে একই IL তে রূপান্তরিত হবে। "এসকিউএল-এর মতো" সিনট্যাক্সটি একটি LINQ এক্সপ্রেশন (যদিও আমি ব্যক্তিগতভাবে এক্সটেনশন পদ্ধতি পছন্দ করি) প্রতিনিধিত্ব করার একটি আরো স্বাভাবিক উপায় বলে মনে করা হয়। ইতিমধ্যেই উল্লেখ করা হয়েছে যে, প্রথম উদাহরণটি একটি IEnumerable ফলাফল ফিরিয়ে দেবে এবং দ্বিতীয় উদাহরণ তালিকার তালিকার কারণে একটি তালিকা ফলাফল ফিরিয়ে দেবে ()। যদি আপনি দ্বিতীয় উদাহরণে ToList() কলটি মুছে ফেলেন, তাহলে উভয় একই ফলাফল ফেরত পাবে যেখানে একটি IEnumerable ফলাফল প্রদান করে।

0
যোগ