我正在创建一个可以接收任何Linq查询的通用表单(C#)。在这种形式中,我希望能够添加过滤器(WHERE子句)。对于像'=','>','赞'等运营商,我可以执行IQueryable.Where(someFieldname + "> @0", someCriteria)
之类的操作。但是,当我想能够做相当于T-sql“IN”时,我完全迷失了。我已经搜索了几个小时,但找不到实现它的方法。
当考虑它时,应该可以将IN子句的值放在字符串数组或其他简单的字符串列表中。然后使用基本查询加入此列表。但是,当基本查询可以是任何查询时,如何加入这两个?
实施例: 假设我的基本查询类似于:
IQueryable<Object> q = from a in db.Adresses
select new { a.Street, a.HouseNr };
在表单中,我希望能够像这样过滤HouseNr:HouseNr IN(1,3,5) 数字(1,3,5)在字符串数组(或任何其他字符串列表)中可用。
我怎样才能实现这一点,知道基本查询可以是什么?
答案 0 :(得分:4)
int[] list = new[]{1, 3, 5};
IQueryable<Object> q = from a in db.Adresses
where list.Contains(a.HouseNr)
select new { a.Street, a.HouseNr };
答案 1 :(得分:2)
Contains
在生成SQL时映射到IN
。
int[] numbers = new int[] { 1, 3, 5 };
var q = from a in db.Addresses
where numbers.Contains(a.HouseNr)
select new { a.Street, a.HouseNr }
答案 2 :(得分:0)
这样怎么样......
string[] Numbers = new string[]{"1", "3", "5"};
IQueryable<Object> q = db.Adresses.Where(a => Numbers.Contains(h.HouseNr));
答案 3 :(得分:0)
只是一个想法...... .Intersect()
方法不会返回两个值都存在的列表值吗?