如何在子句查询中编写LINQ,它也可以像操作符一样工作?
如何为以下select sql查询编写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
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条件的所有记录
请引导我
谢谢
Paulbodystyleid是用来检查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))
.....