Pau*_*aul 4 linq linq-to-entities entity-framework in-clause sql-like
我们如何为以下select sql查询编写LINQ查询:
string brandid="1,2,3"
string bodystyleid="1,2,3"
-------------------
-----------------
select * from car
where brandid in (brandid)
and bodystyleid in (brandid)
----------------------
-------------------
Run Code Online (Sandbox Code Playgroud)
我的具体要求是,如果brandid或bodystyleid为空(如果用户未选中特定搜索选项的任何复选框),则查询应返回该特定条件的所有记录.
请指导我.
谢谢,
保罗
为了满足您关于在没有指定任何项目的情况下返回所有项目的要求,您需要检查列表是否为空.
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;
Run Code Online (Sandbox Code Playgroud)
(类似于sgmoore的解决方案,但包括没有指定品牌/款式的支票)
我实际上没有检查过它是如何转换回SQL的 - 使用标志指示是否有任何值可能更有效:
var brands = ....; // As above
bool anyBrands = brands.Any()
var result = from c in car
where (!anyBrands || brands.Contains(c.brandid))
.....
Run Code Online (Sandbox Code Playgroud)