将 SQL 转换为 Entity Framework Linq 转换为列表 C#
Convert SQL to Entity Framework Linq convert to list C#
我无法根据 Entity Framework 中的另一个 ID 列表选择一个 ID 列表。
我用谷歌搜索并看到了一些例子,但我无法找到我正在寻找的答案
SELECT ID
FROM Main m
INNER JOIN MainMapping cm ON mm.MainId = m.ID
WHERE mm.SecondId IN (1, 2, 3, 4, 5, 6)
我正在尝试将此 SQL 转换为 EF Linq。
这是我目前得到的:
var listOfId = await _context.Main
.Include(main => main.MainMapping)
.Where(main => main.MainMapping
.Where(mapping => request.SecondIdList.Any(y => y == mapping.SecondId)))
.ToListAsync();
但我总是收到错误。我错过了什么?
这些是错误:
Error CS1662 Cannot convert lambda expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type
Error CS0029 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Testing1.Domain.Entities.MainMapping>' to 'bool'
好的,首先,每次调用 .Where
过滤某些内容时,都必须 return 一个 boolean
表达式。鉴于您正在使用 Linq to SQL
,您的表达式应该 return 可以解析为 sql
语言的内容。
关于你的问题,你可以尝试在你的集合 属性 上使用 .Any
到 return 一个布尔值和 Contains
来生成一个 IN
语句。然后,对return一个Id
的集合,使用Select
改变输出。 EF 会将其解析为有效的 sql 表达式。
var listOfId = await _context.Main
.Include(main => main.MainMapping)
.Where(main => main.MainMapping.Any(mapping => request.SecondIdList.Contains(mapping.SecondId)))
.Select(man => main.Id)
.ToListAsync();
我无法根据 Entity Framework 中的另一个 ID 列表选择一个 ID 列表。
我用谷歌搜索并看到了一些例子,但我无法找到我正在寻找的答案
SELECT ID
FROM Main m
INNER JOIN MainMapping cm ON mm.MainId = m.ID
WHERE mm.SecondId IN (1, 2, 3, 4, 5, 6)
我正在尝试将此 SQL 转换为 EF Linq。
这是我目前得到的:
var listOfId = await _context.Main
.Include(main => main.MainMapping)
.Where(main => main.MainMapping
.Where(mapping => request.SecondIdList.Any(y => y == mapping.SecondId)))
.ToListAsync();
但我总是收到错误。我错过了什么?
这些是错误:
Error CS1662 Cannot convert lambda expression to intended delegate type because some of the return types in the block are not implicitly convertible to the delegate return type
Error CS0029 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<Testing1.Domain.Entities.MainMapping>' to 'bool'
好的,首先,每次调用 .Where
过滤某些内容时,都必须 return 一个 boolean
表达式。鉴于您正在使用 Linq to SQL
,您的表达式应该 return 可以解析为 sql
语言的内容。
关于你的问题,你可以尝试在你的集合 属性 上使用 .Any
到 return 一个布尔值和 Contains
来生成一个 IN
语句。然后,对return一个Id
的集合,使用Select
改变输出。 EF 会将其解析为有效的 sql 表达式。
var listOfId = await _context.Main
.Include(main => main.MainMapping)
.Where(main => main.MainMapping.Any(mapping => request.SecondIdList.Contains(mapping.SecondId)))
.Select(man => main.Id)
.ToListAsync();