Linq 获取投影内部子集合中的第一个对象

Linq 获取投影内部子集合中的第一个对象,linq,entity-framework,Linq,Entity Framework,我拥有以下实体: public class Mark { public Int32 Id { get; set; } public DateTime Created { get; set; } public virtual ICollection<MarkLocalized> MarksLocalized { get; set; } } // Mark public class MarkLocalized { public Int32 Id { get; set;

我拥有以下实体:

public class Mark {
  public Int32 Id { get; set; }
  public DateTime Created { get; set; }
  public virtual ICollection<MarkLocalized> MarksLocalized { get; set; }
} // Mark

public class MarkLocalized {
  public Int32 Id { get; set; }
  public String Culture { get; set; }
  public String Name { get; set; }
  public virtual Mark Mark { get; set; }
} // MarkLocalized
我尝试了以下方法:

Context context = new Context();
context.Marks
  .SelectMany(x => x.MarksLocalized, (y, z) =>
    new MarkModel {
      Id = y.Id,
      Name = z.Name,
      Slug = z.Slug
    });
但我只需要将标记本地化,即哪种文化等于给定的文化

我该怎么做

谢谢,,
米格尔

您可以在
中的
位置添加
,选择多个

Context context = new Context();
context.Marks
  .SelectMany(x => x.MarksLocalized.Where(x => x.Culture == "en"), (y, z) =>
    new MarkModel {
      Id = y.Id,
      Name = z.Name,
      Slug = z.Slug
    });
但语法查询应该更清楚:

from m in new Context.Marks
from l in m.MarksLocalized
where l.Culture == "en"
select new MarkModel { m.ID, m.Name, l.Slug }
编译器应将其转换为以下查询:

context.Marks
  .SelectMany(x => x.MarksLocalized, (m, l) => new { m, l })
  .Where(x => x.l.Culture == "en")
  .Select(x => new MarkModel { x.m.ID, x.m.Name, x.l.Slug })

这将产生与第一个完全相同的结果。

第三个选项看起来非常不错。。。我不知道我可以在SelectMany之外找到where,但它符合逻辑。。。非常感谢。
context.Marks
  .SelectMany(x => x.MarksLocalized, (m, l) => new { m, l })
  .Where(x => x.l.Culture == "en")
  .Select(x => new MarkModel { x.m.ID, x.m.Name, x.l.Slug })