লিনক যেখানে () ল্যাম্বডা এক্সপ্রেশনতে "বা" সমতুল্য


91

লিন্কে এমন কোনও পদ্ধতি আছে যেখানে আপনি "... কোথায় (a = 1) বা (a = 2)" এর মতো এসকিউএল স্ট্রিং তৈরি করতে ব্যবহার করতে পারেন?


4
আমি ধরে নিয়েছি যে আপনি কীভাবে ||ডায়নামিক কিছু ব্যবহার করতে চান এবং চান a=a.where(hour=> hour<20); if(weekend) a=a.where(hour=> hour>6);। আপনি আরও স্পষ্টভাবে বলতে চাইবেন ...
কোবি

উত্তর:


189

আপনি অবশ্যই এটি যেখানে ক্লজ (এক্সটেনশন পদ্ধতি) এর মধ্যে করতে পারেন। আপনার যদি একটি জটিল ক্যোয়ারী গতিশীলভাবে তৈরি করার প্রয়োজন হয় তবে আপনি প্রিডিকেটবিল্ডার ব্যবহার করতে পারেন ।

 var query = collection.Where( c => c.A == 1 || c.B == 2 );

অথবা একটি প্রিডিকেটবিল্ডার ব্যবহার করে

 var predicate = PredicateBuilder.False<Foo>();
 predicate = predicate.Or( f => f.A == 1 );
 if (allowB)
 {
    predicate = predicate.Or( f => f.B == 1 );
 }

 var query = collection.Where( predicate );

এটি তৈরি করতে আমার বা আগত প্যারামিটারের মানগুলির উপর নির্ভর করে দুর্দান্ত কাজ করেছে - দুর্দান্ত!
চিহ্নিত করুন

খুব ঠান্ডা. এটি লজ্জার বিষয় যা এটি নেট মান হিসাবে একটি কার্য হিসাবে অন্তর্ভুক্ত করা হয় না।
সর্বোচ্চ

4
খুব সুন্দর বাস্তবায়ন, যদিও এটি উল্লেখ করা নাও হতে পারে এটি কেবল সি # 5+ এর জন্য কাজ করে।
থমাস.ডোনালি

25

আপনি যেখানে আপনার একক ক্ষেত্রে স্ট্যান্ডার্ড .NET বুলিয়ান অপারেটর ব্যবহার করতে পারেন:

MyDataSource.Where(data => data.a == 'a' || data.a == 'b')

19

আপনি সাধারণ সি এর মতো সমস্ত অপারেটর ব্যবহার করেন # ===> || "বা" এবং "এবং" ইত্যাদির জন্য

var something = from s in mycollection
                where s.something == 32 || 
                      s.somethingelse == 45 
                select s

1

আপনার .Where()কলটিতে স্ট্যান্ডার্ড বুলিয়ান 'বা' অপারেটর ব্যবহার করুন ||

var query = items.Where(item => (item == 1 || item == 2));

কল যেখানেই করা হয় তা আপনার যে কোনও কিছুর তুলনায় বুলিয়ান তুলনা, যাতে আপনি এটি নিজের ইচ্ছামত শর্তযুক্ত যুক্তি দিয়ে পূরণ করতে পারেন।


0

আপনি যদি প্যারামিটারের গণনাটি না জানেন তবে আপনি এটি ব্যবহার করতে পারেন:

নমুনা তথ্য

var parameters= new List<string>{"a","d"};
var sampledata = new Dictionary<string,string>();
    sampledata["a"] = "A";
    sampledata["b"] = "B";
    sampledata["c"] = "C";
    sampledata["d"] = "D";

কোড

var query = sampledata.AsQueryable();
var firstItemKey = sampledata.FirstOrDefault().Key;
var queryresult= sampledata.Where(x => x.Key == firstItemKey).AsQueryable();
foreach (var parameter in parameters.Skip(1))
{
    queryresult=queryresult.Concat(query.Where(x => x.Key == parameter));
}
var result = queryresult.ToList();

-1

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

query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));

আপনি সংগ্রহের বস্তুর সাথে অ্যারের সমস্ত শব্দ মিলে একটি 'এবং' প্রিকিকেটের জন্য একই জিনিস করতে পারেন।

query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));

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


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