是否可以在LINQ查询中使用If Else条件?
像
这样的东西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
}
答案 0 :(得分:58)
这可能有用......
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)
}
答案 1 :(得分:8)
我假设db
这是LINQ-to-SQL / Entity Framework /类似(不是LINQ-to-Objects);
通常情况下,您使用条件语法(a?b:c)做得更好 - 但是,我不知道它是否适用于您的不同查询(毕竟,您将如何编写TSQL?)。
对于可以做的事情类型的简单示例:
select new {p.PriceID, Type = p.Price > 0 ? "debit" : "credit" };
你可以做更丰富的事情,但我真的怀疑你可以在条件中选择表。当然,欢迎你试试......
答案 2 :(得分: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);
}
答案 3 :(得分: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)};
答案 4 :(得分:1)
我的例子:
companyNamesFirst = this.model.CustomerDisplayList.Where(a => a.CompanyFirst != null ? a.CompanyFirst.StartsWith(typedChars.ToLower())) : false).Select(b => b.CompanyFirst).Distinct().ToList();
答案 5 :(得分:0)
var result = _context.Employees
.Where(x => !x.IsDeleted)
.Where(x => x.ClientId > (clientId > 0 ? clientId - 1 : -1))
.Where(x => x.ClientId < (clientId > 0 ? clientId + 1 : 1000))
.Where(x => x.ContractorFlag == employeeFlag);
return result;
如果clientId = 0,我们希望所有员工。但对于介于1到999之间的任何clientId,我们只需要具有该ID的客户端。我遇到了单独的LINQ语句不一样的问题(在所有查询中都需要使用“删除/客户端”过滤器),因此通过添加这两行就可以了(所有这一切直到我们拥有999多个客户端为止-这将是我的荣幸天!!