示例
from O in db.Orders
join C in db.Customers on C.Id equals O.CustID
Where O.ord_date == ( filter.OrderDate != null ? filter.OrderDate : o.ord_date) &&
c.Id == (filter.CustId != null ? filter.CustId : c.Id) &&
o.ProductId == ( filter.ProductId != null ? filter.ProductId : o.ProductID)
select new {o,c}
//select new {c.Name, C.JoinDate, O.Value, O.NoofLineItems }
当我打开配置文件时,它有很多我期望的案例陈述。但我对在 C# 中输入的条件有更多的控制权,我怎样才能对 where 条件进行控制,并且仅在过滤器可用时才放置 where 条件
这将提高我发送到数据库的 sql 的质量。
亲切的问候 维奈。
最佳答案
此类问题的一般解决方案是使用 PredicateBuilder动态构造适当的谓词。
首先,构建谓词:
Expression<Func<Order, bool>> predicate = PredicateBuilder.True<Order>();
if (filter.OrderDate != null)
predicate = predicate.And(o => o.ord_date == filter.OrderDate);
if (filter.CustId != null)
predicate = predicate.And(o => o.CustId == filter.CustId);
...
然后你的查询就变成:
var filtered = db.Orders.Where(predicate);
var query = from O in filtered
join C in db.Customers on C.Id equals O.CustID
select new {o,c};
关于linq - 有没有更好的方法来编写这个 Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5005920/