2012-09-09 17 views
6

Arama kriterlerinize dayanarak bir LINQ ifadesi oluşturma konusunda herhangi bir öneriniz var mı?Koşullu WHERE, LINQ içinde

Tüm parametreleri null olan bir 'SearchCriteria' sınıfının örneğinde geçireceğim. Anahtar nokta bu OR'ler değil ANDs olmak olmasıdır

if (sc.a != null) 
    // add to where 

if (sc.b != null) 
    // add to where 

için

sonra istiyorum.

Herhangi bir ipucu?

Ve bonus puanlar için int üzerinde 'içerir' kullanmak isterim? ama sadece eşittir ya da eşit olamaz.

+0

"veya" birleştirmek zordur; ifade ağaçları ve sık sık bir ziyaretçi/yeniden yazmayı içerir. Kaç değişkeniniz var? Sadece ikisi mi? Eğer öyleyse, açıkçası bunu açıkça yapıyor (yani 3 farklı sıralı çizgi - bir X, bir Y, bir X || Y) –

+0

Ne ORM? LINQ to SQL veya Entities Framework? – abatishchev

+0

Potansiyel olarak bir düzine parametre olacaktır .. ve EF kullanıyorum .... –

cevap

4

Dene: Ayrıca

.Where(x => 
    (x.a != null ? x.a == a : false) && 
    (x.b != null ? x.b == b : false)); 

veya

.Where(x => 
    (x.a != null && x.a == a) || 
    (x.b != null && x.b == b)); 

:

.Where(x => new int[] { 1, 2, 3 }.Contains(x.i)); 
+0

&& olmalı || ? –

+0

@Marc: Veya "? False", "operatörün sağ elinde". Doğru? – abatishchev

+0

Bu temiz ve zarif bir çözüm gibi görünüyor ... Ne kadar iyi ölçeklendiğini göreceğim. İkinci kısımdan. Ne var ben 12345 bir int OrderID olduğunu 123 aramak ve yapabileceğiniz dizeleri ile 123 * bulmak istiyorum.Contains ama ints ile yapamazsınız? Bu işe yarayabilir mi? –