从一个结果通过LINQ lambda创建匿名对象

时间:2017-08-02 13:19:15

标签: c# linq lambda

我有以下查询

var resources = Db.RESOURCE_Resource
                .Include(i => i.RESOURCE_Value.Where(s => s.ApplicatieID == applicationId))
                .Include(i => i.RESOURCE_Category)
                .Where(w => missingCultureIds.All(a => w.RESOURCE_Value.All(an => an.CultureID != a))); 

除了想要返回查询返回的项目之外,我还想返回列表的计数。在此查询之后,将在IQueryable上实现更多过滤器,但我需要事先计算。

我是否可以更改查询以使其包含计数而不会导致多个查询?我想要所有这些项目的计数,但我只想要几个项目的数据(之后用

实现)
resources.Skip(pageSize).Take(pageSize*pageNumber)

所以我想生成一个只发送简化的对象列表的查询,但是要计算更多的对象。我知道你可以从像

这样的集合中创建匿名类型

.Select(s => new { property = s.item }

是否有可能做我想要的或者我必须通过存储过程/表值函数来处理它?<​​/ p>

1 个答案:

答案 0 :(得分:0)

您需要两个查询,或者您只需要查询更大的数据集,然后使用代码对其进行过滤。哪种方式表现最佳将取决于较大数据集的大小。

一个查询:

DELETE

两个问题:

 var resources = Db.RESOURCE_Resource
     .Include(i => i.RESOURCE_Value.Where(s => s.ApplicatieID == applicationId))
     .Include(i => i.RESOURCE_Category)
     .Where(w => missingCultureIds.All(a => w.RESOURCE_Value.All(an => an.CultureID != a))).ToList();

var count = resources.Count();
var results = resources.Skip(pageSize).Take(pageSize*pageNumber);