Tag: linq

现有的LINQ扩展方法类似于Parallel.For?

可能重复: LINQ相当于foren for IEnumerable forienumerable的linq扩展方法非常方便……但如果您只想对枚举中的每个项目应用一些计算而不返回任何内容,则无用。 所以我想知道我是否只是错过了正确的方法,或者它是否真的不存在,因为我宁愿使用内置版本,如果它可用……但我还没找到一个:-) 我可以发誓在某处有一个.ForEach方法,但我还没有找到它。 与此同时,我确实编写了自己的版本,以防它对其他人有用: using System.Collections; using System.Collections.Generic; public delegate void Function(T item); public delegate void Function(object item); public static class EnumerableExtensions { public static void For(this IEnumerable enumerable, Function func) { foreach (object item in enumerable) { func(item); } } public static void For(this IEnumerable enumerable, Function func) { foreach […]

如何使用多个条件构建Lambda表达式树

注意:我知道使用动态linq创建它很简单,但我想学习。 我想创建一个“找到”的lambda:Name = David AND Age = 10。 class Person { public int Age { get; set; } public string Name { get; set; } } var lambda = LabmdaExpression(“Name”, “David”, “Age”, 10); static Expression<Func> LabmdaExpression(string property1, string value1, string property2, int value2) { ParameterExpression parameterExpression = Expression.Parameter(typeof(Person), “o”); MemberExpression memberExpression1 = Expression.PropertyOrField(parameterExpression, property1); MemberExpression […]

多组by和Sum LINQ

我有一个产品销售表,如下所示: saleDate prod qty 10/22/09 soap 10 09/22/09 pills 05 09/25/09 soap 06 09/25/09 pills 15 我需要制作每个MONTH的SUM,所以最终的表格看起来像这样: saleDate prod qty 10/09 soap 10 09/09 soap 06 09/09 pills 20 我可以用LINQ做到这一点吗?

C#LINQ – 如何动态构建Group By子句

我正在处理应用程序,用户可以在其中选择他/她想要在屏幕上看到的列以及要分组或聚合的列。 因此,在我的LINQ部分中,我实际上应该将包含列名的变量传递给group by和aggregate子句。 请记住, DataTable dt每次都可能包含不同的数据(例如员工信息,采购订单,性能统计等)。 我只能通过dt.Columns[i].ColumnName和dt.Columns[i].DataType.Name在运行时获取有关数据的信息。 任何人都可以建议如何做到这一点,我需要的是这样的事情: SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable(); da.Fill(dt); var query = from row in dt.AsEnumerable() group row by new { foreach(DataColumn column in dt.Columns) { row[column.ColumnName]; } } into grp select new { foreach(DataColumn column in dt.Columns) { if(column.DataType.Name == “Decimal”) { Sum(grp[column.ColumnName]); }else{ […]

使用LINQ在字节数组中搜索以某个字节开始/停止的所有子数组

我正在处理COM端口应用程序,我们有一个定义的可变长度数据包结构,我正在与微控制器通信。 数据包具有开始和停止字节的分隔符。 麻烦的是,有时读缓冲区可能包含无关的字符。 看起来我总是得到整个数据包,只是在实际数据之前/之后的一些额外的喋喋不休。 所以我有一个缓冲区,只要从COM端口收到新数据,我就会附加数据。 搜索此缓冲区以查找可能出现的数据包的最佳方法是什么? 例如: 假设我的数据包分隔符是0xFF ,我有一个数组 { 0x00, 0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF, 0x04 } 如何创建一个函数/ LINQ-statment来返回以分隔符开头和结尾的所有子数组(几乎就像带有通配符的滑动相关器)? 该示例将返回以下3个数组: {0xFF, 0x02, 0xDA, 0xFF}, {0xFF, 0x55, 0xFF}, and {0xFF, 0x02, 0xDA, 0xFF, 0x55, 0xFF}

为什么C#编译器在使用LINQ方法时会创建私有DisplayClass Any()以及如何避免它?

我有这个代码(整个代码并不重要,但可以在这个链接上看到): internal static class PlayCardActionValidator { public static bool CanPlayCard(…) { // … var hasBigger = playerCards.Any( c => c.Suit == otherPlayerCard.Suit && c.GetValue() > otherPlayerCard.GetValue()); // … } } 例如,在反编译器(ILSpy)中打开代码之后,我注意到C#编译器存在新创建的类c__DisplayClass0_0 : 如果此代码对系统性能不重要,对我来说这不是问题。 这个方法被调用数百万次,垃圾收集器正在清理这些c__DisplayClass0_0实例,这会降低性能: 在使用Any方法时,如何避免创建此类(他的实例和垃圾收集)? 为什么C#编译器创建这个类,我可以使用任何替代的Any()吗?

使用LINQ to SQL进行更新的最有效方法

我可以更新下面函数中给出的员工记录,还是首先要查询员工集合,然后更新数据? public int updateEmployee(App3_EMPLOYEE employee) { DBContextDataContext db = new DBContextDataContext(); db.App3_EMPLOYEEs.Attach(employee); db.SubmitChanges(); return employee.PKEY; } 或者我必须做以下事情? public int updateEmployee(App3_EMPLOYEE employee) { DBContextDataContext db = new DBContextDataContext(); App3_EMPLOYEE emp = db.App3_EMPLOYEEs.Single(e => e.PKEY == employee.PKEY); db.App3_EMPLOYEEs.Attach(employee,emp); db.SubmitChanges(); return employee.PKEY; } 但我不想使用第二种选择。 有没有有效的方法来更新数据? 我通过两种方式得到此错误: 已尝试附加或添加非新的实体,可能已从另一个DataContext加载。 这不受支持。

如何进行递归搜索?

我有一个Task类,它可以有相同类型的子任务 public class Task { public DateTime Start { get; set;} public DateTime Finish { get; set;} public List Tasks {get; set;} public DateTime FindTaskStartDate(Task task) {} } 我应该如何执行递归搜索(也许linq)以找到具有最早开始日期的任务? 我最初的方法涉及太多的循环,它结束了一点点混乱,并迅速失控。 这是我的第二次尝试: public DateTime FindTaskStartDate(Task task) { DateTime startDate = task.Start; if(task.HasSubTasks()) { foreach (var t in task.Tasks) { if (t.Start < startDate) { startDate = […]

在LINQ中组合多个表

我有一个非常简单的SQL查询 Select r.SpaceID,Count(*), SpaceCode from Rider r join Spaces s on r.SpaceID=s.SpaceID Group By r.SpaceID, s.SpaceCode 请注意我的group by子句在多个表上,我想在linq中做同样的事情,我知道如何对单个表进行分组,但是关于多个表我不知道。

LINQ orderby在日期字段中按降序排列

如何在下面的代码中更改LINQ查询,按日期降序排序(最新的,最早的,最后一个)? using System; using System.Linq; using System.Collections.Generic; namespace Helloworld { class MainClass { public static void Main (string[] args) { List env = new List (); Envelops e = new Envelops { ReportDate = DateTime.Now }; env.Add (e); e = new Envelops { ReportDate = DateTime.Now.AddDays (5) }; env.Add (e); e = new Envelops { […]