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

标签 c# sql linq

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/

相关文章:

c# - .NET SSLStream : How to extract session key?

mysql - 带有条件的多个 WHERE 子句

c# - 搜索可枚举的最有效方法

c# - 在 C# 最佳实践中处理字典

c# - 为什么 C# 3.0 对象初始值设定项构造函数括号是可选的?

c# - 使用 LINQ 在列表中查找项目但得到 "Value cannot be null. Parameter name: source"

sql - 如何将视觉上选择的文本通过管道传输到 UNIX 命令并将输出附加到 Vim 中的当前缓冲区

MYSQL 品牌按产品数量列出顺序,但是

c# - 具有多个组作为层次结构的 GroupBy

c# - 使用 OrderBy() 后返回正确的类型