2009-01-14 47 views
32

是否有可能在LINQ查詢中使用If Else條件?如果否則在LINQ

喜歡的東西

from p in db.products 
if p.price>0 
select new 
{ 
    Owner=from q in db.Users 
     select q.Name 
} 
else 
select new 
{ 
    Owner = from r in db.ExternalUsers 
      select r.Name 
} 

回答

51

這可能會實現...

from p in db.products 
    select new 
    { 
     Owner = (p.price > 0 ? 
      from q in db.Users select q.Name : 
      from r in db.ExternalUsers select r.Name) 
    } 
+2

這將是有趣的,看看是否能工程...如果它確實,我很想看到TSQL(假設它急於加載;對於延遲加載,可能不會太糟糕)。 – 2009-01-14 14:12:48

7

我從db假設這是LINQ到SQL /實體框架/相似(未LINQ到對象);

通常情況下,你使用條件語法(a?b:c)做得更好 - 但是,我不知道它是否適用於你的不同查詢(畢竟,你會如何編寫TSQL?) 。

對於事情的類型的一個簡單的例子,你可以

select new {p.PriceID, Type = p.Price > 0 ? "debit" : "credit" }; 

你可以做更豐富的東西,但我真的懷疑你可以挑選在有條件的。歡迎你來試試,當然...上面

3

答案是不適合複雜的LINQ表達式。 所有你需要的是:

// set up the "main query" 
var test = from p in _db.test select _db.test; 
// if str1 is not null, add a where-condition 
if(str1 != null) 
{ 
    test = test.Where(p => p.test == str); 
} 
1

你應該改變這樣的:

private string getValue(float price) 
{ 
    if(price >0) 
     return "debit"; 
    return "credit"; 
} 

//Get value like this 
select new {p.PriceID, Type = getValue(p.Price)}; 
1

我的例子:

companyNamesFirst = this.model.CustomerDisplayList.Where(a => a.CompanyFirst != null ? a.CompanyFirst.StartsWith(typedChars.ToLower())) : false).Select(b => b.CompanyFirst).Distinct().ToList();