[英]Linq to Sql - return all data if 'contains' value is null in where clause
如果value(data.vendorname)为null,则需要获得所有供应商名称,否则会出现错误异常:“ Value不能为null”。
public HttpResponseMessage PostFilter([FromBody] dynamic data)
{
string[] vendorname = data.vendorname != null
? data.vendorname.ToObject<string[]>()
: null;
var items = (from s in context.AllInventories
where
(vendorname!=null
? vendorname.Contains(s.VENDORNAME)
:1==1)
select s)
.Take(500)
.ToList();
}
你为什么不简化这个,仅通过未施加任何where
在所有如果vendorname
为空?
public HttpResponseMessage PostFilter([FromBody] dynamic data)
{
string[] vendorname = data.vendorname != null
? data.vendorname.ToObject<string[]>()
: null;
var query = context.AllInventories.AsQueryable();
if (vendorname != null)
{
query = query.Where(s => vendorname.Contains(s.VENDORNAME));
}
var items = query.Take(500).ToList();
}
为什么不使用简单的if
语句?
IEnumerable<Inventory> inventories = context.AllInventories;
if(vendorname != null)
inventories = inventories.Where(i => vendorname.Contains(i.VENDORNAME));
inventories = inventories.Take(500).ToList();
这比希望您的sql技巧能够工作并且优化器足够聪明,可以忽略您的伪条件要好得多。 调试也更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.