我有以下类(class):
public class A
{
public int Id {get;set;}
public string Name {get; set;}
public ICollection<B> Bs {get; set;}
}
public class B
{
public int Id {get;set;}
public string Name {get; set;}
public ICollection<C> Cs {get; set;}
}
public class C
{
public int Id {get;set;}
public string Name {get; set;}
}
以及这些ViewModel
:
public class AViewModel
{
public int Id {get;set;}
public string Name {get; set;}
public ICollection<BViewModel> BViewModels {get; set;}
}
public class BViewModel
{
public string Name {get; set;}
public ICollection<CViewModel> CViewModels {get; set;}
}
public class CViewModel
{
public string Name {get; set;}
}
我想编写一个linq to实体
查询(Fluent API
)来通过其Id查找
code> 结果是一个带有 A
对象BViewModel
列表的 AViewModel
,每个 BViewModel
也包含一个 CViewModels
列表,
我编写了以下查询,但有一些错误:
_uow.Repository<A>()
.All()
.Include("Bs")
.Include("Bs.Cs")
.Select(a => new AViewModel
{
Name = a.Name,
Id = a.Id,
(ICollection<BViewModel>)
a.Bs
.SelectMany(
t => a.Bs
.Select(r => new BViewModel()
{
Name = r.Name
Cs =
(ICollection<CViewModel>)
t.Cs.SelectMany(y => new CViewModel()
{
Name = y.Name
})
}
)
)
}
).FirstOrDefault(a => a.Id == 5);
我怎样才能做到这一点?
最佳答案
尝试将 SelectMany
替换为 Select
,并将类型转换 (ICollection)
替换为 ToList()
。
_uow.Repository<A>()
.All()
.Select(a => new AViewModel
{
Id = a.Id,
Name = a.Name,
Bs = a.Bs.Select(b => new BViewModel
{
Id = b.Id,
Name = b.Name,
Cs = b.Cs.Select(c => new CViewModel
{
Id = c.Id,
Name = c.Name
}).ToList()
}).ToList()
})
.FirstOrDefault(a => a.Id == Id);
关于c# - 使用linq to实体进行嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25831104/