如何返回tableA的所有列和联接表的一列

时间:2018-07-11 00:33:23

标签: c# entity-framework entity-framework-core

如何在LinqToEntities中表达这一点?

 Select a.*, b.Name as ParentName from items a 
    inner join items b on a.ParentId = b.id
    where a.Id = 1

Item是一个相当大的表,我只想检索单个列并将其包括在结果集中。这是我所能接近的:

 var query = from a in this.DbContext.Items
        join b in this.DbContext.Items
        on a.ParentId equals b.Id
        select a;

我看不到如何将ParentName作为商品的一部分返回

在实体类中,我添加了:

[NotMapped]
public string FolderName{ get; set; }

但是我不知道如何填充它。

然后我需要将其发送回控制器,将其序列化为Json并发送给客户端(浏览器),这样我就不能在这里使用匿名类型或valuetuple。

2 个答案:

答案 0 :(得分:1)

您不能将b的列拖到a中,但是可以将两者合并到您定义的命名类型的对象中,以将两者合并:

class ItemAndParent {
    Item A { get; set; }
    string ParentName { get; set; }
}

var query = from a in this.DbContext.Items
    join b in this.DbContext.Items
    on a.ParentId equals b.Id
    select new ItemAndParent {
        A = a,
        ParentName = b.Name
    };

答案 1 :(得分:1)

您应该投影到一个旨在保存正确属性的新DTO类中。例如:

课程:

public class Foo
{
    public string SomeValue { get; set; }
    public string AnotherValue { get; set; }
    //etc
    public string ParentName { get; set; }
}

查询:

var query = from a in this.DbContext.Items
    join b in this.DbContext.Items
    on a.ParentId equals b.Id
    select new Foo
    {
        SomeValue = a.SomeValue,
        AnotherValue = a.AnotherValue,
        //etc
        ParentName = b.Name

    };