什么是以下sql查询的linq等价物

sup*_* mr 3 c# sql linq

select Productid from categories where `categoryname` in `('abc','def','ghi')`; 
Run Code Online (Sandbox Code Playgroud)

我试过这个:

var res = from catg in db.Categories where catg.CategoryId.ToString().Contains(SelectedProducts) select catg;
Run Code Online (Sandbox Code Playgroud)

但这似乎不起作用......

Sma*_*Dev 5

假设SelectedProducts是一个产品ID数组(整数):

var cats = db.Categories.Where(o => SelectedProducts.Contains(o.CategoryId));
var pids = cats.Select(o => o.ProductId);
Run Code Online (Sandbox Code Playgroud)

原因:SQL IN运算符LINQ与SQL 相反实现.这个问题突出了LINQ开发人员试图从SQL翻译的一个常见错误,期望一种[attribute] [operator] [set]语法.

使用抽象集语言,我们可以突出显示语法差异

  • SQL使用"Element is includedin Set"语法
  • LINQ使用"Set containsElement"语法

因此IN必须使用Contains运算符恢复任何子句.它会转化为attribute IN (SET)无论如何.