Linq'de "... (a = 1) OR (a = 2)" gibi SQL dizelerini oluşturmak için kullanabileceğiniz bir yöntem var mı?"Veya" eşdeğeri Linq Where() lambda ifadesi
cevap
Bir Nereye maddesi (uzatma yöntemiyle) içinde bunu kesinlikle yapabilirsiniz. Bununla birlikte, karmaşık bir sorguyu dinamik olarak oluşturmanız gerekiyorsa, bir PredicateBuilder kullanabilirsiniz.
var query = collection.Where(c => c.A == 1 || c.B == 2);
Veya .Where()
çağrısında bir 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);
Yükleyicilerin Nice kullanımı! +1 :) –
Bu, gelen parametrelerin değerlerine bağlı olarak ya da onu inşa etmek için gerekli olan harika çalıştı - Awesome! – dadwithkids
Çok havalı. Bu utanç verici bir standart olarak .NET içinde bir işlev olarak dahil değildir. – maxp
fıkra nerede Eğer tek standart .NET bağlaçlar kullanabilirsiniz:
MyDataSource.Where(data => data.a == 'a' || data.a == 'b')
Bence bu en iyi ve en basit cevaptır. – user1477388
Bu en basit cevaptır. – Eranda
Bir çözüm olabilir Dinamik Linq:
Hepiniz aynısınız kullanmak operatörler normal C# ===> || için "veya" & & için "ve" vb
var something = from s in mycollection
where s.something == 32 ||
s.somethingelse == 45
select s
Bu yöntemi tercih ediyorum, daha doğal görünüyor – nXqd
kullanılarak ||
, standart Boole 'Ya' operatörünü kullanın. istediğiniz gibi kadar şartlı mantığı ile doldurmak böylece
var query = items.Where(item => (item == 1 || item == 2));
Tüm Nerede çağrı yapar, istediğiniz herhangi bir şey üzerinde bir Boole fark var.
Bu şimdi .net içine yerleştirilmiş, daha önce olmadığından emin değil. Mevcut bir Linq sorgusu verildiğinde, bir dizi dizeyi (SearchStrings) alan bir where cümlesi ekleyebilir ve bunlardan herhangi birinin, aradığınız koleksiyondaki herhangi bir nesne ile eşleşip eşleşmediğini kontrol edebilirsiniz. ToLower() işlevini kullanmak, SQL sorgularında büyük/küçük harf duyarlılığından kaçınmanızı sağlar.
query.Where(i => SearchStrings.Any(s => i.ToLower().Contains(s.ToLower()));
Sen koleksiyonunun nesneye dizideki tüm kelimeleri eşleştirerek Bir 've' yüklemi için aynı şeyi yapabilir.
query.Where(i => SearchStrings.All(s => i.ToLower().Contains(s.ToLower()));
Bu örnekte i koleksiyonunda her nesneye ilişkilidir ve s Searchstrings dizisindeki her bir dize karşı gelir.
- 1. Linq veya Lambda ifadesi kullanarak SQL Arası Eşdeğeri
- 2. LINQ: Yeniden lambda ifadesi
- 3. LINQ ifadesi
- 4. Dinamik olarak Linq Lambda İfadesi Oluşturun
- 5. Koşullu WHERE, LINQ içinde
- 6. Lambda İfadesi
- 7. Lambda İfadesi
- 8. LINQ: Nokta İfadesi ve Sorgu İfadesi
- 9. Linq Lambda,
- 10. SQL eşdeğeri LINQ. All()
- 11. Linq veya lambda ifadesiyle nesne gruplaması
- 12. Yerel değişken bu kapsamda bildirilen edilemez [Linq/Lambda ifadesi]
- 13. lambda ifadesi listesinde
- 14. lambda ifadesi Örneğin
- 15. Python lambda ifadesi
- 16. Lambda İfadesi + Tablosunun Açıklaması *
- 17. C++ lambda ifadesi?
- 18. C# inline lambda ifadesi
- 19. LINQ Lambda Parametre kapsamında
- 20. Lambda ifadeleri neden lambda ifadesi olarak adlandırılır?
- 21. Lambda LINQ- vs "İfade her zaman yanlış"
- 22. LINQ
- 23. Basit Linq ifadesi derlenmez
- 24. Linq yuvalanmış listesi ifadesi
- 25. Null ile Linq ifadesi
- 26. LINQ Lambda Grubu tarafından Sum
- 27. .net lambda ifadesi ve parametre
- 28. Spark Combinebykey JAVA lambda ifadesi
- 29. Tamsayı, Dizin aracılığıyla Lambda ifadesi
- 30. Bu "Lambda İfadesi" ne yapar?
"||" işlevini nasıl kullanacağınızı ve dinamik bir şey istediğinizi (örneğin, a = a.where (saat => saat <20)); eğer (haftasonu) a = a.where (saat => saat> 6); '. Bunu daha açık bir şekilde belirtmek isteyebilirsiniz ... – Kobi