如何在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。
答案 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
};