Tag: lambda

lambda表达式的扩展方法

我有一个帮助方法,它获取由lambda定义的属性的名称,其工作方式如下: ExpressionUtil.GetName((Thing t) => t.Property); // returns “Property” 我想将其转换为扩展方法,因此语法将是以下forms: ((Thing t) => t.Property).GetName(); // wont compile : operator ‘.’ cannot be applies to operand of type ‘lambda expression’ 但是我似乎不能这样做((Thing t) => t.Property)是一个lambda(不是表达式或Func)。 有没有办法编写一个直接应用于lambda的扩展方法? 如果不是为什么这是一件坏事?

如何ToLookup()与多个索引?

考虑下面的C#Console应用程序的代码,使用 如何修改它以替换该行: foreach (Product product in productsByCategory[category]) 通过代码行 foreach (Product product in productsByCategory[category][Id]) ? using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace myQuestion { class Program { static void Main(string[] args) { var products = new List { new Product { Id = 1, Category = “Garden”, Value = 15.0 }, new Product { […]

访问Lambda表达式中的Modified Closure

foreach(var category in categories) { a.AddRange(_db.Articles.Where(c => c.Categories.Contains(category))); } 代码运行正常,但我在lambda表达式中使用的category得到关于“访问修改后的闭包”的警告。 问题:在这种情况下是否有任何后果的警告?

EntityFramework从SQL Server View返回损坏/交换的数据

我从SQL Server中的视图中进行简单查询: SELECT [PricePerM] FROM RealtyStatParent ORDER BY PricePerM 当我在SQL Management Studio中执行查询时,我得到了正确的结果。 这意味着我从1.00开始获得2532行,结束时为173543.6893。 当我使用entity framework从C#进行查询时,我得到了相同的结果: var justDecimals = context.RealtyStatParents .OrderBy(item => item.PricePerM) .Select(item => item.PricePerM) .ToArray(); 到现在为止没什么特别 但我真正不理解的是跟随查询。 我首先选择整行,然后选择价格(十进制)。 var entireRows = context.RealtyStatParents .OrderBy(item => item.PricePerM) .ToArray(); var decimalFromRows = entireRows .Select(item => item.PricePerM) .ToArray(); PricePerM的许多值重复(值1或48)而不是实际值,并且结果集未正确排序。 EF设计器中行的定义很简单: public partial class RealtyStatParent { public Nullable PricePerM […]

LINQ:如何在不使用For循环与Array的情况下使用RemoveAll

我目前有一个日志对象,我想根据LINQ查询删除对象。 如果程序中的版本总和大于60,我想删除日志中的所有记录。目前我非常有信心这可行,但它看起来像kludgy: for (int index = 0; index (log.Program[index].Version[0].Value + log.Program[index].Version[1].Value + log.Program[index].Version[2].Value ) > 60); } 该程序是一个包含4个值的数组,版本具有3个值的数组。 有没有更简单的方法在LINQ中执行此RemoveAll而不使用for循环? 在此先感谢您的帮助! 编辑:不幸的是,程序和版本所基于的变量类型(这是我正在使用的框架的约束)限制了我们,使得我无法访问“任何”成员。 然而,我确认如果你通过创建一些示例代码来获得列表 ,那么tzaman的解决方案是有效的。 我被限制为类似数组的变量(参见注释掉的区域) // I’m restricted to Arrays, but if I had lists, this would work. internal class MyLogCollection { List MyListOfZones = new List(); public void TestRemove() { // Original Implementation for (int […]

将lambda表达式与属性路径相结合

我需要能够将2个lambda表达式组合成1: 这将使我能够创建类型安全包含(对于EF)的扩展。 现在你可以这样做: context.House .Include(x => x.Doors.Doorknobs) 我希望能够将上述陈述分成不同的方法。 像IncludeDoorKnobs(query,expressionFromRoot,expressionFromCurrentToChild)之类的东西 然后我想 – 将组合表达式包含在查询中 – 包含额外的子项(从当前)到该查询 – 调用其他类似的方法,包括树的另一部分。 我对Lambda的了解显然很短暂,我真的需要很快进入它们,但是现在,我不得不求助于SOF ……

lambda表达式是multithreading的吗?

lambda表达式是multithreading的吗? 说当你把数学公式写成lambda方法时,当你把它传递给另一个方法时,它会是multithreading的吗?

在列表上使用带有foreach Action的条件lambda语句

为什么我不能做这样的事情? 如果我有一个List myList填充了项目,我希望能够以条件方式对每个成员执行操作: myList.ForEach(a => { if (a.Trim().Length == 0) a = “0.0”; }) 但这不会编译。 我猜它与缺少一个返回值有什么关系? 我试图准备一个字符串列表转换为双打,我希望空项目显示’0.0’所以我可以一次性转换整个列表。

如何检查我的lambda表达式为null?

如果没有匹配以下lambda查询的记录,我会得到一个 System.InvalidOperationException错误。 附加信息:转换为值类型’System.Decimal’失败,因为具体化值为null。 结果类型的generics参数或查询必须使用可空类型。 代码是: runTime = db.Records.Where(c => c.MachineDesc.Contains(strMachine) && c.ProductionDate == dt && c.Shift == x).Sum(c => c.RunMinutes); 变量runTime是decimal 。 我尝试将其更改为decimal? 但我仍然得到同样的错误。 解决这个问题的正确方法是什么?

C#是否通过Value传递给Lambdas?

我有一些代码, int count = 0; list.ForEach(i => i.SomeFunction(count++)); 这似乎没有增加计数。 计数是否按此值传递? 如果我在lambda中使用{}有什么区别吗? int count = 0; list.ForEach(i => { i.SomeFunction(count++); }); 更新1 对不起,我的错误,它确实更新了原始计数。