Example
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 的质量。
亲切的问候
维奈。
此类问题的一般解决方案是使用谓词生成器 http://www.albahari.com/nutshell/predicatebuilder.aspx动态构造适当的谓词。
首先,构建谓词:
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};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)