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;
但这似乎不起作用......
最佳答案
假设 SelectedProducts
是一个产品 ID 数组(整数):
var cats = db.Categories.Where(o => SelectedProducts.Contains(o.CategoryId));
var pids = cats.Select(o => o.ProductId);
原因:SQL IN
运算符在LINQ
to SQL 中是相反实现的。该问题突出了 LINQ 开发人员在尝试从 SQL 进行翻译时的一个常见错误,期望使用 [attribute] [operator] [set]
语法。
使用抽象集合语言,我们可以突出语法差异
- SQL 使用“元素
包含
在集合中”语法 - LINQ 使用“设置
包含
元素”语法
因此任何 IN
子句都必须使用 Contains
运算符还原。无论如何,它将转换为 attribute IN (SET)
。
关于c# - 以下 sql 查询的 linq 等价物是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28213224/