select Productid from categories where `categoryname` in `('abc','def','ghi')`;
我试过这个:
var res = from catg in db.Categories where catg.CategoryId.ToString().Contains(SelectedProducts) select catg;
但这似乎不起作用......
答案 0 :(得分:5)
假设SelectedProducts
是一个产品ID数组(整数):
var cats = db.Categories.Where(o => SelectedProducts.Contains(o.CategoryId));
var pids = cats.Select(o => o.ProductId);
原因:SQL IN
运算符在LINQ
到SQL中相反实现。这个问题突出了LINQ开发人员试图从SQL翻译时常见的错误,期望[attribute] [operator] [set]
语法。
使用抽象集语言,我们可以突出显示语法差异
is included
”
contains
元素”语法因此必须使用IN
运算符还原任何Contains
子句。无论如何它都会转换为attribute IN (SET)
。
答案 1 :(得分:3)
您需要在 SelectedProducts
上使用Contains
var res = from catg in db.Categories where
SelectedProducts.Contains(catg.categoryname) select catg.Productid;
使用方法表示法
var res = db.Categories.Where(catg => SelectedProducts
.Contains(catg.categoryname)).Select(catg.Productid);
答案 2 :(得分:3)
SQL IN与IEnumerable.Contains()的等价性:
var res = from catg in db.Categories
where new[] {"abc","def","ghi"}.Contains(catg.categoryname)
select catg.Productid
或lambda
db.Categories.Where(x => new[] {"abc","def","ghi"}.Contains(x.categoryname)).Select(c => c.ProductId);