Tag: lambda

当Linq没有返回时返回一个空集合

我正在使用以下语句,目的是从MachineList集合(类型IEnumerable)获取具有i的MachineStatus的所有机器对象。 MachineList集合不会始终包含状态为i的计算机 。 有时没有机器有我的MachineStatus我想要返回一个空集合。 我对ActiveMachines (首先使用)的调用有效但InactiveMachines没有。 public IEnumerable ActiveMachines { get { return Customer.MachineList .Where(m => m.MachineStatus == “a”); } } public IEnumerable InactiveMachines { get { return Customer.MachineList .Where(m => m.MachineStatus == “i”); } } 编辑 经过进一步检查,似乎MachineList任何枚举都会导致MachineList后续枚举抛出exception: Object reference not set to an instance of an object 。 因此,调用ActiveMachines或InactiveMachines作为MachineList集合的问题并不重要。 这尤其令人不安,因为我可以通过在Watch中调用它来调用MachineList ,然后再在代码中调用它。 在最低级别, MachineList实现了NHibernate.IQuery作为IEnumerable返回。 什么导致MachineList在初始枚举后丢失其内容?

Lambda具有嵌套类

我刚刚发布了这个问题但得到了我的问题的部分答案,所以我想我发布了更多的解释,希望得到一个更准确的答案。 我有2个class: public class Employee { public string Name { get; set; } public List Cars { get; set; } } public class Car { public int CarID { get; set; } public CarTypes CarType { get; set; } public enum CarTypes { Van, SmallCar } } 我试图只获得所有使用Lambda分配了使用SmallCars忽略那些货车的员工,我尝试了这一行: List EmployeesWithVans = AllEmployees.Where(emps => emps.Car.Any(cartype => […]

Array.Sort in with nontrivial comparison function

在Nutshell中考虑C#5.0中的以下代码,p。 289: int[] numbers = { 1, 2, 3, 4, 5 }; Array.Sort (numbers, (x, y) => x % 2 == y % 2 ? 0 : x % 2 == 1 ? -1 : 1); 得到结果{3, 5, 1, 2, 4} 。 我在纸上尝试了这个并得到{1, 3, 5, 2, 4} 。 为什么计算机排序给3 > 5 > 1 ?

如何在c#中使用linq / lambda获取数据副本而不是引用?

是否有一种简单的方法可以基本上只使用此方法获取数据的副本而不是引用? 我试过.ToArray()。Where()但似乎仍然传递了一个引用。 例: static void Main(string[] args) { List t = new List(); t.Add(new ob() { name = “hello” }); t.Add(new ob() { name = “test” }); ob item = t.Where(c => c.name == “hello”).First(); // Changing the name of the item changes the original item in the list item.name = “burp”; foreach (ob i […]

表现:.Join vs .Contains – Linq to Entities

我使用Linq实体查询数据库以获取int列表以供进一步处理。 我有两种方法可以获得如下列表: 首先是: List lstBizIds = new List() { 1, 2, 3, 4, 5 }; List lstProjectIds = context.Projects.Where(x => lstBizIds.Contains(x.businessId)).Select(x => x.projectId).ToList(); 第二是: List lstBizIds = new List() { 1, 2, 3, 4, 5 }; List lstProjectIds = context.Projects.Join(lstBizIds, p => p.businessId, u => u, (p, u) => p.projectId).ToList(); 现在我的问题是上面哪一种方法更好的表现? 如果第一个列表即lstBizIds的大小增加,它是否也会影响性能? 如果性能降低,建议我采用其他实施方式。

是否可以将lambda表达式存储在数组C#中

我正在编写一个游戏AI引擎,我想在一个数组中存储一些lambda表达式/委托(多个参数列表)。 像这样的东西: _events.Add( (delegate() { Debug.Log(“OHAI!”); }) ); _events.Add( (delegate() { DoSomethingFancy(this, 2, “dsad”); }) ); 在C#中有可能吗?

使用lambda表达式时c#中的闭包是如何工作的?

在以下教程中: http : //www.albahari.com/threading/ 他们说以下代码: for (int i = 0; i Console.Write (i)).Start(); 是非确定性的,可以产生以下答案: 0223557799 我认为当使用lambda表达式时,编译器会创建某种匿名类,通过在捕获类中创建类似它们的成员来捕获正在使用的变量。 但i是价值类型,所以我认为他应该被价值复制。 我的错在哪里? 如果答案将解释闭包是如何工作的,它如何保存特定int的“指针”,在这个特定情况下生成了什么代码,将会非常有用?

Linq OrderBy()。ThenBy()方法序列的时间复杂度是多少?

我在我的项目中使用Linq和Lambda Operations,我需要根据类的两个属性对List进行排序。 因此,我使用了OrderBy()。ThenBy()方法如下: class ValueWithIndex{ public long Value; public int Index; } … List valuesWithIndex = new List(); for (int i = 0; i v.Value).ThenBy(v => v.Index); … 在本回答中,解释了OrderBy()使用Quicksort,因此即使它具有O(N * logN)平均时间复杂度,对于最坏的情况,时间复杂度约为O(N 2 )。 如果ThenBy()方法的时间复杂度最差为O(N 2 ),那么使用这些方法毫无意义。 ThenBy()方法也使用Quicksort吗? 如果是,那是否意味着对于相同的“v.Value”,“v.Index”会被排序为O(N 2 )最差的时间复杂度?

foreach(… in …)或.ForEach(); 这就是问题

可能重复: C#foreach vs functional each 这是关于编码可读性的问题。 我有一个XDocument和一个List包含我需要屏蔽的敏感信息的元素名称(在本例中用下划线替换)。 XDocument xDoc; List propertiesToMask; 这可以用两种方式编写,使用传统的foreach循环,或使用带有lamba语法的.ForEach方法。 foreach (string propertyToMask in propertiesToMask) { foreach (XElement element in xDoc.Descendants(propertyToMask)) { element.SetValue(new string(‘_’, element.Value.Length)); } } 要么 propertiesToMask .ForEach(propertyToMask => xDoc.Descendants(propertyToMask).ToList() .ForEach(element => element.SetValue(new string(‘_’, element.Value.Length)))); 您认为哪种方法最易读,为什么? 如果您更喜欢第二个示例,您将如何呈现它以获得最大可读性?

如何根据订购排序

可以说我有物品 items : [{id:1,…}, {id:2,…}, {id:3,…}] 并命令:[ 2,3,1 ]得到一个可枚举的 items : [{id:2,…}, {id:3,…}, {id:1,…}] 我希望它能成为符合标准的东西 items.Select(o => new {key = ordering[i++], value = o}) .OrderBy(k => k.key) .Select(o => o.value) 但有更清洁的解决方案吗? 我已经validation了这项工作(HimBromBeere,Domysee,qxg) var expectedOrder = ordering.Select(x => result.First(o => o.Id == x)); var expectedOrder = result.OrderBy(item => Array.FindIndex(ordering,i => i == item.Id)); var expectedOrder = […]