实体框架加入三个表并使用组Concat

时间:2017-05-08 20:14:53

标签: c# asp.net entity-framework webforms

我有三个模型如下,

    public class Team
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
    public class Document
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Type { get; set; }
        public string Application { get; set; }
        public ICollection<DocumentResponsible> DocumentResponsibles { get; set; }
        public string Pcda { get; set; }
        public DateTime CreatedAt { get; set; }
        public DateTime UpdatedAt { get; set; }
    }
    public class DocumentResponsible
    {
        public int Id { get; set; }
        public int DocumentId { get; set; }
        public int TeamId { get; set; }
    }

我想编写一个实体框架表达式来连接三个表,并在每个文档的一行中选择文档表和团队名称的所有字段。所以基本上我想加入三个表使用group_concat作为团队名称。然后我想将它绑定到web形式的gridview。

我尝试了什么,

(from dc in DBContext.Document
join dr in DBContext.DocumentResponsible on dc.Id equals dr.DocumentId
join t in DBContext.Team on dr.TeamId equals t.Id
select new
{
    Name = dc.Name,
    Type = dc.Type,
    Application = dc.Application,
    Pcda = dc.Pcda,
}).ToList();

我刚尝试过,

var data = DBContext.Dcoument.Include("DocumentResponsibles").Tolist();

1 个答案:

答案 0 :(得分:0)

没有你的DbContext和实体映射很难提供帮助,但我会说你可能只想将Document.DocumentResponsibles标记为虚拟。

此外,在DocumentResponsible中,您可能希望为Document添加一个属性,为Team添加一个属性(两者都标记为虚拟),这样您就不必在您想要处理数据的任何时候都要使用连接键,只要正确配置,EF就会为您完成。

如果它不起作用,您可以在问题中添加以下信息:首先,上下文类和您拥有的映射。其次,如果你var firstDocument = yoneylemDB.Document.First() firstDocument~/.bash_profile怎么样?它是否填写了所有的字段和属性?有什么奇怪的吗?