পদ্ধতি সিনট্যাক্সের সাথে কীভাবে লিনাক থেকে এসকিএল এ যোগদান করবেন?


193

আমি লিনকিউ থেকে এসকিউএল এর উদাহরণগুলিতে প্রচুর উদাহরণ দেখেছি কীভাবে ক্যোয়ারী বাক্য গঠনতে যোগদান করতে হয় তবে আমি কীভাবে পদ্ধতি সিনট্যাক্স দিয়ে এটি করব তা ভাবছি? উদাহরণস্বরূপ আমি নিম্নলিখিতটি কীভাবে করতে পারি

var result = from sc in enumerableOfSomeClass
             join soc in enumerableOfSomeOtherClass
             on sc.Property1 equals soc.Property2
             select new { SomeClass = sc, SomeOtherClass = soc }

একটি দিয়ে .Join()? কেউ উদাহরণস্বরূপ বা অন্য একটি সহজ উদাহরণ প্রদান করতে পারেন?

উত্তর:


284
var result = from sc in enumerableOfSomeClass
             join soc in enumerableOfSomeOtherClass
             on sc.Property1 equals soc.Property2
             select new { SomeClass = sc, SomeOtherClass = soc };

সমান হবে:

var result = enumerableOfSomeClass
    .Join(enumerableOfSomeOtherClass,
          sc => sc.Property1,
          soc => soc.Property2,
          (sc, soc) => new
                       {
                           SomeClass = sc,
                           SomeOtherClass = soc
                       });

যেমন আপনি দেখতে পাচ্ছেন, যখন এটি যোগদানের কথা আসে তখন ল্যাম্বদা সিনট্যাক্সের চেয়ে কোয়েরি সিনট্যাক্সটি অনেক বেশি পঠনযোগ্য।


129

জাস্টিন সেই ক্ষেত্রে প্রসারণটি সঠিকভাবে দেখিয়েছেন যেখানে যোগদানের পরে কেবলমাত্র এ select। যদি আপনি অন্য কিছু পেয়ে থাকেন তবে স্বচ্ছ শনাক্তকারীদের কারণে এটি আরও জটিল হয়ে ওঠে - সি # সংকলক জোড়ানের উভয় অংশের প্রসার প্রচার করতে যে পদ্ধতিটি ব্যবহার করে।

সুতরাং জাস্টিনের উদাহরণটি সামান্য পরিবর্তন করতে:

var result = from sc in enumerableOfSomeClass
             join soc in enumerableOfSomeOtherClass
             on sc.Property1 equals soc.Property2
             where sc.X + sc.Y == 10
             select new { SomeClass = sc, SomeOtherClass = soc }

এরকম কিছুতে রূপান্তরিত হবে:

var result = enumerableOfSomeClass
    .Join(enumerableOfSomeOtherClass,
          sc => sc.Property1,
          soc => soc.Property2,
          (sc, soc) => new { sc, soc })
    .Where(z => z.sc.X + z.sc.Y == 10)
    .Select(z => new { SomeClass = z.sc, SomeOtherClass = z.soc });

zএখানে স্বচ্ছ শনাক্তকারী - কিন্তু কারণ এটি স্বচ্ছ, আপনি এটা মূল ক্যোয়ারীতে দেখতে পারে না :)


5

এখানে অন্য উত্তরগুলি যুক্ত করার জন্য, আপনি যদি যেখানে কোনও ধারা দিয়ে তৃতীয় ভিন্ন ধরণের একটি নতুন অবজেক্ট তৈরি করতে চান (যেমন একটি যা আপনার সত্তা ফ্রেমওয়ার্ক অবজেক্ট নয়) আপনি এটি করতে পারেন:

public IEnumerable<ThirdNonEntityClass> demoMethod(IEnumerable<int> property1Values)
{
    using(var entityFrameworkObjectContext = new EntityFrameworkObjectContext )
    {
        var result = entityFrameworkObjectContext.SomeClass
            .Join(entityFrameworkObjectContext.SomeOtherClass,
                sc => sc.property1,
                soc => soc.property2,
                (sc, soc) => new {sc, soc})
            .Where(s => propertyValues.Any(pvals => pvals == es.sc.property1)
            .Select(s => new ThirdNonEntityClass 
            {
                dataValue1 = s.sc.dataValueA,
                dataValue2 = s.soc.dataValueB
            })
            .ToList();
    }

    return result;

}    

মধ্যবর্তী বস্তুটির দিকে বিশেষ মনোযোগ দিন যা কোথাও এবং নির্বাচনের ধারাগুলিতে তৈরি করা হয়েছে।

নোট করুন যে এখানে আমরা ইনপুট তালিকার একটির সাথে মেলে এমন সম্পত্তি 1 রয়েছে এমন যে কোনও যুক্ত হওয়া অবজেক্টের জন্যও সন্ধান করি।

আমি জানি যে এটি মূল প্রশ্নকারী যা চেয়েছিল তার চেয়ে কিছুটা জটিল, তবে আশা করি এটি কাউকে সহায়তা করবে।

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