我是Linq to Entity的新手,所以我不知道我所做的是最好的方法。
当我执行这样的查询时,它会编译,但会抛出一个错误,它无法识别方法GetItemSummaries。看起来,这似乎是因为它不喜欢查询中的自定义方法。
return (from c in _entity.Category
from i in c.Items
orderby c.Id, i.Id descending
select new CategoryDto
{
Id = c.Id,
Name = c.Name,
Items = GetItemSummaries(c)
}).ToList();
private IEnumerable<ItemSummary> GetItemSummaries(CategoryDto c)
{
return (from i in c.Items
select new ItemSummary
{
// Assignment stuff
}).ToList();
}
我如何将其组合成单个查询,因为我无法调用自定义方法?
我尝试用实际查询替换方法调用,但后来抱怨ItemSummary无法识别,而不是抱怨方法名称无法识别。有没有办法做到这一点? (或者更好的方法?)
答案 0 :(得分:2)
您应该能够执行以下操作:
return (
from c in _entity.Category
orderby c.Id descending
select new CategoryDto
{
Id = c.Id,
Name = c.Name,
Items = (
from i in c.Items
order by i.Id descending
select new ItemSummary
{
// Assignment stuff
}
)
}).ToList();
这只是确保ItemSummary是公开的,以便查询可见。
如果它只是一个Dto,你可以使用anon类型,例如:
from i in c.Items
order by i.Id descending
select new
{
Id = i.Id,
Name = i.Name
}
这将创建一个具有“Id”和“Name”属性的类型。全部取决于您的消费代码需要:)
答案 1 :(得分:0)
尝试将GetItemSummaries
方法作为Category
类
private static IEnumerable<ItemSummary> GetItemSummaries(this Category c)
然后用
调用它select new Category
{
Id = c.Id,
Name = c.Name,
Items = c.GetItemSummaries()
}).ToList();
马克