我无法找到一种方法来完成这项工作,并希望有人有一个想法.一个简化的例子是有一个整数列表1-100,我想分组每3行所以结果将是1,2,3在第一组然后4,5,6在下一组等我知道如何获取每个第n条记录,但我需要的是所有记录,以便我可以使用first,last,sum,max等聚合它们.
谢谢!
我想在列表中获取where子句的结果,然后获取该结果集并创建一个新类型,其所有字段都是从原始查询的聚合构造的.所以给定下面的基本示例,无论如何将两个linq语句合并为一个?如果原始的地方没有行,那么它应该返回null.谢谢!
class Foo
{
public int A { get; set; }
public int B { get; set; }
}
List<Foo> lst = GetFooList();
var q = (from f in lst
where f.A > 3
select f).ToList();
if (q.Count != 0)
{
var qq = new
{
MinA = q.Min(l => l.A),
MaxB = q.Max(h => h.B),
};
// now do something with qq
}
Run Code Online (Sandbox Code Playgroud)
更新:对于我的情况,原始集合有很多项目,但在where子句之后,结果集非常小.多次枚举第二组应该不是问题.此外,我需要在集合上使用first和last来从这些记录中获取值.答案小组最适合我.聚合方式非常有趣,我认为还有其他用途.
我有c#项目正在使用sqlserver压缩版和实体框架进行数据访问.我需要向db插入或更新大量5000+或更多的行,因此如果密钥存在,则更新记录(如果不插入).我无法找到一种方法来实现这一点与紧凑版和EF具有可怕的性能,即在核心i7计算机上花费2分钟.我已经尝试搜索记录,看它是否存在,然后插入,如果没有,或更新,如果它,搜索是杀手.我已经尝试编译搜索查询,但只做了一点改进.我尝试的另一件事是在try catch中插入记录,如果更新失败,但这迫使我在每条记录上保存更改以获得异常,而不是在最后是性能杀手.显然我不能使用存储过程,因为它是紧凑版.另外我看过只是在db上直接执行t-sql,但是在compact中缺少进程语句似乎排除了这一点.我在全世界范围内搜寻和思考.我真的想使用紧凑型,如果我可以过度表达部署的好处和能力,以防止用户挖掘数据库.任何建议将不胜感激.
谢谢