C# 我应该如何编写这个Linq到实体查询?
我对Linq是个新手,所以我不知道我所做的是不是最好的方法 当我执行这样的查询时,它会编译,但会抛出一个错误,即它无法识别GetItemSummaries方法。查找它,这似乎是因为它不喜欢查询中的自定义方法C# 我应该如何编写这个Linq到实体查询?,c#,asp.net-mvc,linq-to-entities,C#,Asp.net Mvc,Linq To Entities,我对Linq是个新手,所以我不知道我所做的是不是最好的方法 当我执行这样的查询时,它会编译,但会抛出一个错误,即它无法识别GetItemSummaries方法。查找它,这似乎是因为它不喜欢查询中的自定义方法 return (from c in _entity.Category from i in c.Items orderby c.Id, i.Id descending select new Cate
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();
}
return(来自实体类别中的c
从i到c.项目
按c.Id、i.Id降序排序
选择“新建类别到”
{
Id=c.Id,
Name=c.Name,
Items=GetItemSummaries(c)
}).ToList();
私有IEnumerable GetItemSummaries(c类)
{
返回(来自i/c.项目
选择新项目摘要
{
//任务材料
}).ToList();
}
既然我不能调用自定义方法,我该如何将其组合到单个查询中
我尝试用实际的查询替换方法调用,但结果是ItemSummary无法识别,而不是方法名无法识别。有没有办法做到这一点?(或者更好的方法?尝试将
GetItemSummaries
方法作为类别
类的扩展方法
private static IEnumerable<ItemSummary> GetItemSummaries(this Category c)
Marc您应该能够执行以下操作:
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是公共的,以便查询可以看到它
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();
}
如果只是Dto,您可以使用anon类型,例如:
from i in c.Items
order by i.Id descending
select new
{
Id = i.Id,
Name = i.Name
}
这将创建一个具有“Id”和“Name”属性的类型。这一切都取决于您的消费代码需要什么:)对不起,这只是一个学习应用程序,所以我的命名有点懒惰。我返回的类别是从实体对象创建的Dto对象,我认为我不能在Dto类上创建一个扩展方法并让它执行我想要的操作。为什么不呢?您可以在任何对象上放置扩展方法—只要“Category”对象包含GetItemSummaries方法中所需的所有信息—没有问题。