如何编写LINQ IN子句查询,它也可以作为LIKE运算符使用?

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为空(如果用户未选中特定搜索选项的任何复选框),则查询应返回该特定条件的所有记录.

请指导我.

谢谢,

保罗

Ric*_*ard 6

为了满足您关于在没有指定任何项目的情况下返回所有项目的要求,您需要检查列表是否为空.

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)