Tag: linq

为什么Reverse for List和IEnumerable有两个完全不同的版本?

对于List对象,我们有一个名为Reverse()的方法。 它反转了“就地”列表的顺序,它不会返回任何内容。 对于IEnumerable对象,我们有一个名为Reverse()的扩展方法。 它返回另一个IEnumerable。 我需要以相反的顺序遍历列表,所以我不能直接使用第二种方法,因为我得到一个List,我不想反转它,只是向后迭代。 所以我可以这样做: for(int i = list.Count – 1; i >=0; i–) 要么 foreach(var item in list.AsEnumerable().Reverse()) 我发现它的可读性低于我拥有IEnumerable时的可读性 foreach(var item in list.Reverse()) 我无法理解为什么这两种方法以这种方式实现,名称相同。 这很令人讨厌和困惑。 为什么在Reverse()中没有一个名为BackwardsIterator()的扩展名为所有IEnumerable工作? 我对这种选择的历史原因非常感兴趣,而不是“怎么做”的东西!

如何在C#中使用LINQ方法或查询表达式检索最后5条记录

在我的主页上,我想展示最近添加的产品。 我已经向我的控制器添加了一个ChildAction,但我无法理解我应该运行哪些Linq查询来获取最后五个记录。

将IQueryable转换为IEnumerable会再次执行查询吗?

在我的查询中,我需要返回IEnumerable但我不知道这个动作是否使查询再次执行? var data = Repository.Find().AsEnumerable(); Find()返回IQueryable ,因为IQueryableinheritance了IEnumerable 。 我怀疑AsEnumerable会重复执行。 我知道var data = Repository.Find().ToList()执行两次查询。 一个用于Find() ,第二个用于Tolist()

Queryable.Single上的IndexOutOfRangeException

我有一个ASP.NET网站已经运行了很长时间,最近没有任何改变。 从一个小时到下一个小时,我开始在一行中接收一个IndexOutOfRangeException,我在这里执行LINQ查询: var form = SqlDB.GetTable() .Where(f => f.FormID == formID) .Single(); ORMB.Form是一个POCO对象,LINQ to SQL属性将其映射到MSSQL表(映射validation为正确)。 堆栈跟踪如下: System.Web.HttpUnhandledException: Exception of type ‘System.Web.HttpUnhandledException’ was thrown. —> System.IndexOutOfRangeException: Index was outside the bounds of the array. at System.Collections.Generic.List`1.Add(T item) at System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) at […]

C#:ToArray性能

背景: 我承认我并没有尝试对此进行基准测试,但我很好奇…… Enumerable.ToArray (及其堂兄Enumerable.ToList )的CPU /内存特性是什么? 由于IEnumerable没有预先通告它有多少元素,我(或许天真地)假设ToArray必须“猜测”一个初始数组大小,然后如果第一个猜测看起来太小则resize/重新分配数组,那么如果第二次猜测看起来太小等,再次调整它的大小…这会产生比线性更差的性能。 我可以想象更好的方法涉及(混合)列表,但这仍然需要多个分配(虽然不重新分配)和相当多的复制,尽管它可能是线性整体尽管开销。 题: 幕后是否有任何“神奇”发生,避免了重复resize的需要,并使ToArray在空间和时间上ToArray线性? 更一般地说,是否有关于BCL性能特征的“官方”文档?

将一个大的IEnumerable划分为一个固定数量的项目的较小IEnumerable

为了支持只接受特定数量的项目(5项)的API,我想将LINQ结果转换为总是包含设定数量项目的较小项目组。 假设清单{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18} 我想得到三个较小的列表,每个最多包含5个项目 {1, 2, 3, 4, 5} {6, 7, 8, 9, 10} {11, 12, 13, 14, 15} {16, 17, 18} 我怎么能用LINQ做到这一点? 我假设它涉及Group或Aggregate ,但我无法弄清楚如何编写它。

用LINQ计算加权平均值

我的目标是根据另一个表主键从一个表中获得加权平均值。 示例数据: 表格1 Key WEIGHTED_AVERAGE 0200 0 表2 ForeignKey Length Value 0200 105 52 0200 105 60 0200 105 54 0200 105 -1 0200 47 55 我需要根据段的长度得到加权平均值,我需要忽略-1的值。 我知道如何在SQL中执行此操作,但我的目标是在LINQ中执行此操作。 它在SQL中看起来像这样: SELECT Sum(t2.Value*t2.Length)/Sum(t2.Length) AS WEIGHTED_AVERAGE FROM Table1 t1, Table2 t2 WHERE t2.Value -1 AND t2.ForeignKey = t1.Key; 我仍然是LINQ的新手,并且很难弄清楚我将如何翻译它。 结果加权平均值应该大约为55.3。 谢谢。

如何在Linq获得SUM?

我需要执行以下操作,我有一个List ,其中包含一个包含2个整数id和count的类 现在我想做以下linq查询: get the sum of the count for each id 但是可能存在具有相同id的项目,因此应该对其进行总结,例如: id=1, count=12 id=2, count=1 id=1, count=2 应该是: id=1 -> sum 14 id=2 -> sum 1 这该怎么做?

Linq:如何查询集合中的项目,直到总和达到某个值

给出以下对象: public class Product { string Name {get;} int Quantity {get;} } 使用Linq,如果我得到一个总和>=给定数量,我将如何查询List ? 换句话说,如果我的列表看起来像 Name Quantity —————– prod1 5 prod2 6 prod7 7 我想查询List并拉出实例,直到得到Sum >=8 。 在这种情况下,我将获得列表中的前两项。 如果我想要总和>= 12 ,我会得到所有三个。 我知道我可以写一个循环为我做这个,但我想幻想有一些光滑的单行使用Linq来实现同样的事情。 谢谢

如何动态创建谓词

您好我想使用谓词表达式基于搜索字符串创建列表。 我有一个类型产品列表包含不同的名称。 List list1 = new List(); list1.Add(new products(“sowmya”)); list1.Add(new products(“Jane”)); list1.Add(new products(“John”)); list1.Add(new products(“kumar”)); list1.Add(new products(“ramya”)); listBox1.ItemsSource = list1; 现在我想根据用户输入过滤内容。用户将输入n个字符串,并带有’+’作为分隔符。 收到字符串后,我会将它们传递给谓词对象 private void textBox1_KeyDown(object sender, KeyEventArgs e) { List list2 = new List(); Expression<Func> predicate = PredicateBuilder.True(); if (e.Key == Key.Enter) { string Searchstring = textBox1.Text.ToString().Trim(); string[] separator = new string[] { “+” }; […]