2012-03-15 21 views
8

Şu anda bir previous sorusundan yola çıkarak, şimdi hem ANDVEYA sorguları için dinamik ifadelerin nasıl oluşturulacağını anlamaya çalışıyorum. Aşağıdaki dize dizisi VerilenBir döngüde dinamik VEYA linq ifade ağacı oluşturma

:

string[] ranges = new string[]{"0-100", "100-200", "500-1000"}; 
Dinamik bir linq ifadesinde bu ifade etmek istiyorum

- Bir şey satırları: i dinamik linq ifadesini yaratırım nasıl

var v = from p in products 
     where 
     (p.Amount >= 0 && p.Amount <= 100) || 
     (p.Amount >= 101 && p.Amount <= 200) || 
     (p.Amount >= 500 && p.Amount <= 1000) 
     select p; 

bu döngüde?

string[] ranges = new string[]{"0-100", "100-200", "500-1000"}; 

var query = products.AsQueryable(); 

foreach (var item in ranges) 
{ 
    int min = int.Parse(item.Split('-').First()); 
    int max = int.Parse(item.Split('-').Last());     
    //Linq expression? 
} 

cevap

16

Kullanım predicate builder: Biz false boole devlet ile başlamak nasıl

string[] ranges = new string[]{"0-100", "100-200", "500-1000"}; 
var predicate = PredicateBuilder.False<Product>(); 

foreach (var item in ranges) 
{ 
    int min = int.Parse(item.Split('-').First()); 
    int max = int.Parse(item.Split('-').Last());     
    predicate = predicate.Or(p => p.Amount >= min && p.Amount <= max); 
} 

Bildirim ve döngüde birlikte or tümceleri. Tersine, yüklemeleri birlikte true ve and bir durum ile başlayabilirsiniz.

Son olarak, bu sorgu anlama sözdizimi ile mümkündür, ancak nihai sorgu ardından benzeyebilir emin değil: Bu doğru yolda üzerine götürdü

var v = products.Where(predicate); 
+0

teşekkür. Yükleyici oluşturucu ve daha fazlasını içeren LINQKit nuget paketini kurmayı bitirdim. EF nesneleriyle çalışıyorsanız bu yararlıdır. – Fixer

İlgili konular