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



我有以下实体:

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

给定一个文化,例如"en",我需要获得所有标记,给定文化的本地化名称,并将它们映射到MarkModel:

public class MarkModel {
  public Int32 Id { get; set; }
  public String Name { get; set; }
} // MarkModel

我试了如下:

Context context = new Context();
context.Marks
  .SelectMany(x => x.MarksLocalized, (y, z) =>
    new MarkModel {
      Id = y.Id,
      Name = z.Name,
      Slug = z.Slug
    });

但是我只需要与给定文化相等的markslocalization。

我该怎么做?

谢谢你,米格尔

您可以在SelectMany中添加Where:

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 })

相关内容

  • 没有找到相关文章

最新更新