4

我们如何为以下 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 条件的所有记录。

请指导我。

谢谢,

保罗

4

4 回答 4

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))
               .....
于 2012-05-24T18:07:16.183 回答
2

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

作为开始,你可以这样做:

var results = (from c in car
               where c.brandid.Contains(brandid)
               && c.bodystyleid.Contains(brandid)
               select c).ToList();
于 2012-05-24T17:37:45.793 回答
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();
于 2012-05-24T17:52:05.077 回答
0

您拥有的Ids 是带有逗号分隔符的字符串,您需要它们是与表的 sList相同类型的集合,因此如果列必须是,那么您可以这样做IdCarbrandidintbrandidsList<long>

var results = (
    from c in cars
    where brandids.Contains(c.brandid) && bodystyleid.Contains(c.bodystyleid) 
    select c).ToList();
于 2012-05-24T17:50:18.580 回答