Apakah ada metode di Linq di mana Anda dapat menggunakan untuk membangun string SQL seperti "... where (a = 1) OR (a = 2)"?
Jawaban:
Anda pasti bisa melakukannya dalam klausa Where (metode ekstensi). Jika Anda perlu membuat kueri kompleks secara dinamis, Anda dapat menggunakan PredicateBuilder .
var query = collection.Where( c => c.A == 1 || c.B == 2 );
Atau menggunakan PredicateBuilder
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 );
Anda dapat menggunakan operator boolean .NET standar di klausa tempat tunggal Anda:
MyDataSource.Where(data => data.a == 'a' || data.a == 'b')
dalam .Where()
panggilan Anda, gunakan operator Boolean 'Or' standar ||
,.
var query = items.Where(item => (item == 1 || item == 2));
Semua panggilan Where do adalah perbandingan Boolean pada apa pun yang Anda inginkan, sehingga Anda dapat mengisinya dengan logika kondisional sebanyak yang Anda inginkan.
Jika Anda tidak mengetahui jumlah parameter, Anda dapat menggunakan ini:
Contoh data
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";
Kode
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();
Ini dibangun ke dalam .net sekarang, tidak yakin apakah sebelumnya tidak. Dengan kueri Linq yang sudah ada, Anda bisa menambahkan klausa where yang mengambil larik string (SearchStrings), dan memeriksa apakah ada yang cocok dengan objek apa pun dalam koleksi yang Anda cari. Menggunakan ToLower () hanya memastikan bahwa Anda menghindari sensitivitas huruf besar-kecil dalam kueri SQL.
query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));
Anda dapat melakukan hal yang sama untuk predikat 'dan' dengan mencocokkan semua kata dalam larik dengan objek collection.
query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));
Dalam contoh ini saya berkorelasi dengan setiap objek dalam koleksi, dan berkorelasi dengan setiap string dalam array SearchStrings.
||
dan menginginkan sesuatu yang dinamis, sepertia=a.where(hour=> hour<20); if(weekend) a=a.where(hour=> hour>6);
. Anda mungkin ingin menyatakan itu lebih jelas ...