如果在LINQ中有其他

时间:2009-01-14 14:02:20

标签: c# linq linq-to-sql

是否可以在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
}

6 个答案:

答案 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多个客户端为止-这将是我的荣幸天!!