我们如何为以下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为空(如果用户没有选择 任何特定搜索选项的复选框)查询应该返回该特定条件的所有记录。
请指导我。
谢谢,
保
答案 0 :(得分: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;
(类似于sgmoore的解决方案,但包括没有指定品牌/风格的支票)
我实际上没有检查过它是如何转换回SQL的 - 使用一个标志来指示是否有任何值可能更有效:
var brands = ....; // As above
bool anyBrands = brands.Any()
var result = from c in car
where (!anyBrands || brands.Contains(c.brandid))
.....
答案 1 :(得分:2)
bodystyleid是否意味着检查brandid或bodystyleid? (我假设是bodystyleid,但是已经编写了查询以匹配问题中的查询(brandid))
首先,您可以这样做:
var results = (from c in car
where c.brandid.Contains(brandid)
&& c.bodystyleid.Contains(brandid)
select c).ToList();
答案 2 :(得分:2)
var brandids = brandid .Split(',').Select(n => int.Parse(n)).ToList();
var bodyStyleids = bodystyleid.Split(',').Select(n => int.Parse(n)).ToList();
var results =
(from c in car where
brandids.Contains(c.brandid) &&
bodyStyleids.Contains(c.bodystyleid)
select c
).ToList();
答案 3 :(得分:0)
你拥有的Id
是带逗号分隔符的字符串,你需要它们是List
的集合,其类型与Id
的{{1}}相同表格,如果Car
列为brandid
,则int
必须为brandids
,那么您可以
List<long>