Linq 包含整数数组
Linq Contains for Integer Array
我需要根据 Linq C# 中的 ID 从 Table 中获取记录。 Linq 有 Contains,它适用于 String,但任何人都可以帮助我如何使用整数数组实现它。
int[] ServiceID = {1, 4, 5}
var result = from table in _context.Table where table.ServiceID.Contains(ServiceID)
我正在寻找 Int 数组的类似过滤器。如果有人有任何想法,请提供帮助。
int[] ServiceID
不要调用局部变量 ServiceID
-
- 局部变量应该以驼峰式命名,
- 代表集合的变量应该是复数,
- 您的 table 上有一个名为 ServiceID 的 属性 - 调用局部变量相同会导致混淆
您需要询问的模式不是“我的 table.ServiceId 是否包含这些需要的服务 ID”,而是“这些需要的服务 ID 是否包含 table 服务 ID”:
int[] wantedServiceIDs = {1, 4, 5}
var result = from table in _context.Table
where wantedServiceIDs.Contains(table.ServiceID)
在 SQL 术语中,这将被翻译成
FROM table
WHERE serviceId IN (1,4,5)
你熟悉 SQL 的困惑在于,这是你要求的翻转..
您应该编写 list.Contains(column)
的 LINQ 并且 SQL 需要将其翻转到 column IN(list)
- 当然,当您查看 english language 合乎逻辑 - x Contains y 是 y IN x 的翻转。熟悉 SQL 的 IN,以及英文单词“IN”和“Contains”本身的意思几乎相同,可能会导致很多人尝试 column.Contains(list)
,而他们需要的是相反的
另一个可能的混淆点是,当人们考虑 SQL table 中的一列数据时,他们会看到多个值。但实际上 database/code 只考虑一个一次一行的数据,所以它是 multiple.Contains(single)
或 single IN (multiple)
,永远不会是 multipleX.Contains(multipleY)
您还可以询问“是否有任何需要的服务 ID 等于 table 服务 ID”
var result = from table in _context.Table where
wantedServiceIDs.Any(wantedId => table.ServiceID == wantedId)
后一种形式比较棘手,因为它常常让你相信你可以使用复杂的表达式来完善你的 table
,但你不能,所以我会努力避免使用它。例如
var wantedServices = new[] { new Service{ ID = 1, name = ""}, new Service{ ID = 2, name = ""} };
//this wouldn't work/not be translatable to SQL
var result = from table in _context.Table where
wantedServices.Any(wantedService => table.ServiceID == wantedService.ID)
使用简单的“ID 整数列表”.Contains 会阻止您尝试这种形式
你可以这样写(使用Contains
)。还将您的数组变量名称更改为 ServiceIDs
int[] ServiceIDs = {1, 4, 5}
var result = ServiceID.Where(i => ServiceIDs.Contains(i.OrderId));
我需要根据 Linq C# 中的 ID 从 Table 中获取记录。 Linq 有 Contains,它适用于 String,但任何人都可以帮助我如何使用整数数组实现它。
int[] ServiceID = {1, 4, 5}
var result = from table in _context.Table where table.ServiceID.Contains(ServiceID)
我正在寻找 Int 数组的类似过滤器。如果有人有任何想法,请提供帮助。
int[] ServiceID
不要调用局部变量 ServiceID
-
- 局部变量应该以驼峰式命名,
- 代表集合的变量应该是复数,
- 您的 table 上有一个名为 ServiceID 的 属性 - 调用局部变量相同会导致混淆
您需要询问的模式不是“我的 table.ServiceId 是否包含这些需要的服务 ID”,而是“这些需要的服务 ID 是否包含 table 服务 ID”:
int[] wantedServiceIDs = {1, 4, 5}
var result = from table in _context.Table
where wantedServiceIDs.Contains(table.ServiceID)
在 SQL 术语中,这将被翻译成
FROM table
WHERE serviceId IN (1,4,5)
你熟悉 SQL 的困惑在于,这是你要求的翻转..
您应该编写 list.Contains(column)
的 LINQ 并且 SQL 需要将其翻转到 column IN(list)
- 当然,当您查看 english language 合乎逻辑 - x Contains y 是 y IN x 的翻转。熟悉 SQL 的 IN,以及英文单词“IN”和“Contains”本身的意思几乎相同,可能会导致很多人尝试 column.Contains(list)
,而他们需要的是相反的
另一个可能的混淆点是,当人们考虑 SQL table 中的一列数据时,他们会看到多个值。但实际上 database/code 只考虑一个一次一行的数据,所以它是 multiple.Contains(single)
或 single IN (multiple)
,永远不会是 multipleX.Contains(multipleY)
您还可以询问“是否有任何需要的服务 ID 等于 table 服务 ID”
var result = from table in _context.Table where
wantedServiceIDs.Any(wantedId => table.ServiceID == wantedId)
后一种形式比较棘手,因为它常常让你相信你可以使用复杂的表达式来完善你的 table
,但你不能,所以我会努力避免使用它。例如
var wantedServices = new[] { new Service{ ID = 1, name = ""}, new Service{ ID = 2, name = ""} };
//this wouldn't work/not be translatable to SQL
var result = from table in _context.Table where
wantedServices.Any(wantedService => table.ServiceID == wantedService.ID)
使用简单的“ID 整数列表”.Contains 会阻止您尝试这种形式
你可以这样写(使用Contains
)。还将您的数组变量名称更改为 ServiceIDs
int[] ServiceIDs = {1, 4, 5}
var result = ServiceID.Where(i => ServiceIDs.Contains(i.OrderId));