繁体   English   中英

Linq to SQL-如果where子句中的'contains'值为null,则返回所有数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM