【问题标题】:Convert SQL to Entity Framework Linq convert to list C#将 SQL 转换为实体框架 Linq 转换为列表 C#
【发布时间】:2021-12-16 15:46:06
【问题描述】:

我被困在根据实体框架中的另一个 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();

但我不断收到错误。我错过了什么?

这些是错误:

错误 CS1662 无法将 lambda 表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型

错误 CS0029 无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“bool”

【问题讨论】:

    标签: c# sql .net entity-framework linq


    【解决方案1】:

    好的,首先,每次调用.Where 过滤某些内容时,都必须返回一个boolean 表达式。鉴于您使用的是Linq to SQL,您的表达式应该返回可以解析为sql 语言的内容。

    关于您的任务,您可以尝试在您的集合属性上使用.Any 来返回一个布尔值,并使用Contains 来生成一个IN 语句。然后,要返回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();
    

    【讨论】:

    • 哦,我明白了,我明白了,非常感谢您的帮助!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多