【问题标题】:Linq Query With Entities and Group By带有实体和分组依据的 Linq 查询
【发布时间】:2014-08-18 13:41:46
【问题描述】:

我有如下所示的实体(使用 .NET Code First 和存储库模式):

public abstract class BaseContent : Entity
{
    public Guid ID { get; set; }
    public virtual ICollection<AssignedMedia> AssignedMedias { get; set; }
}

public partial class Library : BaseContent
{
    public Library()
    {
        this.AssignedMedias = new List<AssignedMedia>();
    }
}

public class Media : BaseContent
{
    public Media()
    {
        this.AssignedMedias = new List<AssignedMedia>();
    }
}

public class AssignedMedia : Entity
{
    public int ID { get; set; }

    //BaseContent reference ID
    public Guid AssignedId { get; set; }

    public Guid MediaId { get; set; }

    public virtual Media Media { get; set; }
    public virtual BaseContent BaseContent { get; set; }
}

然后我尝试将查询(作为 Dictionary>)作为 group by! 例如:

var list = from bc in Libraries
    join a in AssignedMedias on bc.ID equals a.AssignedId
    join m in Medias on a.MediaId equals m.ID
    select new {
        LibraryName = bc.Name, MediaList = ??? 
    };

【问题讨论】:

  • 你有什么问题?
  • 我的问题是如何获得如上所示的 ToDictionary() linq 类型查询。 LibraryName 应该作为 group by 并且应该包含相关 Media 作为 List 每个 Library

标签: linq ef-code-first


【解决方案1】:

如果您已经正确映射了实体关联,则无需使用join。您可以像这样编写查询:

var libraryAssignedMedia = Libraries.ToDictionary(
    l => l.Name, // Key selection.
    l => l.AssignedMedias.Select(am => am.Media)); // Value selection.

【讨论】:

  • var libraryAssignedMedia = _unitOfWork.Repository&lt;Library&gt;().Query() .Include(l =&gt; l.AssignedMedias.Select(s =&gt; s.Media)).Select().ToDictionary( l =&gt; l.Name, // Key selection. l =&gt; l.AssignedMedias.Select(am =&gt; am.Media)); // Value selection. 变化不大,但你的方式很有帮助
猜你喜欢
  • 1970-01-01
  • 2014-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多