代码之家  ›  专栏  ›  技术社区  ›  Drago

Linq通过比较Id和具有Id的对象列表来查询获取列表

  •  0
  • Drago  · 技术社区  · 2 年前

    我有以下代码:

    var translations = _context.Translations
           Where(t => t.LineId == lines.Id)
    

    我有一个变量名为 lines 类型为 List<Line> 每一个 Line 对象具有 Line.Id

    现在我有另一个表名为 Translations 我想得到所有有 线身份证件 这等于 线身份证件 线 列表

    如何在单个LINQ表达式中实现这一点?

    我需要这样的东西:

     var translations = new List<Translation>();
    
     foreach (var line in lines)
     {
        var translation =
        _context.Translations.FirstOrDefault(t => t.LineId == line.Id);
        translations.Add(translation);
     }
    
    2 回复  |  直到 2 年前
        1
  •  1
  •   Moho    2 年前

    项目an IEnumerable<T> 你的 Line.Id 属性,然后将查询中的结果与 Contains 方法:

    var lineIDs = lines.Select(l => l.Id).ToArray();
    
    var translations = _context.Translations
        .Where(t => lineIDs.Contains(t.LineId))
        .ToList();
    
        2
  •  0
  •   Mike Hofer    2 年前

    因为您只需要那些ID存在于中的翻译 lines ,这将为您提供您想要的:

    var translations = from translation in _context.Translations
                       join line in lines on translation.LineID equals line.LineID
                       select translation;
    

    A. join 将比为中的每个项调用LINQ查询更快 Translations “表。”