Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在子句查询中编写LINQ,它也可以像操作符一样工作?_Linq_Entity Framework_Linq To Entities_Sql Like_In Clause - Fatal编程技术网

如何在子句查询中编写LINQ,它也可以像操作符一样工作?

如何在子句查询中编写LINQ,它也可以像操作符一样工作?,linq,entity-framework,linq-to-entities,sql-like,in-clause,Linq,Entity Framework,Linq To Entities,Sql Like,In Clause,如何为以下select sql查询编写LINQ查询: string brandid="1,2,3" string bodystyleid="1,2,3" ------------------- ----------------- select * from car where brandid in (brandid) and bodystyleid in (brandid) ---------------------- ------------------- 我的具体要求是,如果brandi

如何为以下select sql查询编写LINQ查询:

string brandid="1,2,3"
string bodystyleid="1,2,3"
-------------------
-----------------

select * from car
where brandid in (brandid)
and bodystyleid in (brandid)
----------------------
-------------------
我的具体要求是,如果brandid或bodystyleid为空(如果用户未选择 任何特定搜索选项(where)查询的复选框都应返回该特定where条件的所有记录

请引导我

谢谢


Paul

bodystyleid是用来检查brandid还是bodystyleid的?(我假设bodystyleid,但是我编写了查询以匹配问题中的查询(brandid))

首先,您可以:

var results = (from c in car
               where c.brandid.Contains(brandid)
               && c.bodystyleid.Contains(brandid)
               select c).ToList();

您拥有的
Id
s是带逗号分隔符的字符串,您需要它们是
List
之类的集合,与
Car
表的
Id
s类型相同,因此如果
brandid
列是
int
,那么
brandid
必须是
List
,那么您就可以这样做

var results = (
    from c in cars
    where brandids.Contains(c.brandid) && bodystyleid.Contains(c.bodystyleid) 
    select c).ToList();

为了满足您的要求,如果没有指定任何项目,您需要检查列表是否为空

var brands = brandid.Split(',').Select(x => Int32.Parse(x));
var styles = bodystyleid.Split(',').Select(x => Int32.Parse(x));

var result = from c in car
             where (!brands.Any() || brands.Contains(c.brandid))
                  && (!styles.Any() || styles.Contains(c.bodystyleid))
             select c;
(与sgmoore的解决方案类似,但包括检查是否未指定品牌/样式)

实际上,我还没有检查如何将其转换回SQL-使用标志指示是否存在任何值可能更有效:

var brands = ....;   // As above
bool anyBrands = brands.Any()
var result = from c in car
             where (!anyBrands || brands.Contains(c.brandid))
               .....

谢谢,这对我很有效。在这种情况下,您是否可以建议我,在性能方面编写存储过程还是使用LINQ哪一个更好?@Paul-请自己运行Sqlserver的跟踪工具,查看生成了哪些SQL,然后看看是否可以编写更好的SQL。选择性能更好或执行计划更好的产品。
var brands = ....;   // As above
bool anyBrands = brands.Any()
var result = from c in car
             where (!anyBrands || brands.Contains(c.brandid))
               .....