Tag: linq

SelectMany()无法推断类型参数 – 为什么不呢?

我有一个Employee表和一个Office表。 它们通过EmployeeOffices表以多对多关系连接EmployeeOffices 。 我想获得一个特定员工( CurrentEmployee )与之关联的所有办公室的列表。 我以为我可以这样做: foreach (var office in CurrentEmployee.EmployeeOffices.SelectMany(eo => eo.Office)) ; 但这给了我错误: 无法从用法中推断出方法’System.Linq.Enumerable.SelectMany(System.Collections.Generic.IEnumerable,System.Func>)’的类型参数。 尝试显式指定类型参数。 我知道我可以添加类型参数。 但Intellisense认识到eo.Office属于Office类型。 那么编译器为什么不清楚呢?

C#-Closure -Clarification

我正在学习C#。可以说,闭包是a construct that can adopt the changes in the environment in which it is defined. 示例: List gurus = new List() { new Person{id=1,Name=”Jon Skeet”}, new Person{id=2,Name=”Marc Gravell”}, new Person{id=3,Name=”Lasse”} }; void FindPersonByID(int id) { gurus.FindAll(delegate(Person x) { return x.id == id; }); } 变量id在FindPersonByID()的范围内声明,但我们仍然可以访问匿名函数内的局部变量id (即) delegate(Person x) { return x.id == id; } delegate(Person […]

如何使用Linq搜索分层数据

我需要在树中搜索可能在树中任何位置的数据。 如何用linq完成? class Program { static void Main(string[] args) { var familyRoot = new Family() {Name = “FamilyRoot”}; var familyB = new Family() {Name = “FamilyB”}; familyRoot.Children.Add(familyB); var familyC = new Family() {Name = “FamilyC”}; familyB.Children.Add(familyC); var familyD = new Family() {Name = “FamilyD”}; familyC.Children.Add(familyD); //There can be from 1 to n levels of families. […]

OrderBy()。Last()或OrderByDescending()。First()性能

我知道这可能是微优化,但我仍然想知道使用是否有任何区别 var lastObject = myList.OrderBy(item => item.Created).Last(); 要么 var lastObject = myList.OrderByDescending(item => item.Created).First(); 我正在寻找Linq to objects和Linq to Entities的答案。

为entity framework制作全局filter

对于我的模型,我在所有模型上都有一个active属性,如果管理中没有显示模型,我想过滤所有非活动状态。最好的方法是什么,我目前使用的是以下内容 在我的基础模型类中,我有这个过滤集合的方法 public virtual IQueryable GlobalDefaultScope(IQueryable c) where T : CModel { if (settings.is_admin) { c = c.Where(m => m.active); } return c; } 在我的每个关系的模型上,我做了以下方法 DbSet set … var X = set.Where(some filter); var list = globalDefaultScope(X).ToList(); return list; 现在我有一些严重的问题,当我想急切地使用include(“Xmodel.Ymodel”)加载一些子关系时,我在该集合的get方法中调用了globalDefaultScope来过滤集合,但它在某些项目时不断抛出此exception在集合中是不活动的 System.InvalidOperationException:操作失败:无法更改关系,因为一个或多个外键属性不可为空。 我怎么能解决这个问题,或者我怎么能以更优雅的方式制作这个filter,因为我真的不太满意我是如何实现它的。 请询问任何遗漏的信息或代码块或任何细节 更新: 我也找到了这个链接 ,但这种方式不适用于急切加载的条目( include() ) UPDATE2: 这是我如何使用包含和错误发生的示例 在我的模型中 public IQueryable getSomeRelation(bool eagerly_load_sub_relation1, […]

此代码返回不同的值。 但是,我想要的是返回强类型集合而不是匿名类型

我有以下代码: var foo = (from data in pivotedData.AsEnumerable() select new { Group = data.Field(“Group_Number”), Study = data.Field(“Study_Name”) }).Distinct(); 正如预期的那样,这将返回不同 但是,我想要的是返回强类型集合而不是匿名类型,所以当我这样做时: var foo = (from data in pivotedData.AsEnumerable() select new BarObject { Group = data.Field(“Group_Number”), Study = data.Field(“Study_Name”) }).Distinct(); 这不会返回不同的值,它会返回所有值。 有没有办法用实际对象做到这一点?

foreach只执行一次查询吗?

我有一个项目列表和LINQ查询。 现在,使用LINQ的延迟执行,后续的foreach循环是否只执行一次查询或循环中的每次转弯? 给出这个例子(取自LINQ查询简介(C#),在MSDN上 ) // The Three Parts of a LINQ Query: // 1. Data source. int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 }; // 2. Query creation. // numQuery is an IEnumerable var numQuery = from num in numbers where (num % 2) == 0 select num; // […]

如何使用F#lambda创建Linq表达式树?

以下是C#中可以做的事情 – var two = 2; System.Linq.Expressions.Expression<System.Func> expr = x => x * two; expr.Compile().Invoke(4); // returns 8 我希望在F#中做到精确的等价物。 这是我尝试过的,但没有编译 – let two = 2 let expr = (fun x -> x * two) : System.Linq.Expressions.Expression<System.Func> expr.Compile().Invoke(4) // desired to return 8 也许可以预见,编译在第2行失败,出现以下错误 – “This function takes too many arguments, or is used in a […]

LINQ基于childorder对单个列表进行排序

我目前正在尝试找出一种使用LINQ和C#对元素进行排序的好方法,但我有点没有这样做。 对于这个问题,我们假设您有以下表格 —TempTable ID (int) ParentID (int) Name (varchar) SortOrder (int) ID和ParentID彼此相关,并为我提供了一个自我分层的数据结构。 根元素在ID字段中为空。 SortOrder只是整个表的一部分,并且基于ParentID,因此共享相同ParentID的元素在其中具有1,2,3。 让我们进一步假设以下数据: ID = 1 ParentID = null Name = Test 1 SortOrder = 1 ID = 2 ParentID = 1 Name = Test 2 SortOrder = 1 ID = 3 ParentID = 1 Name = Test 3 SortOrder = 2 ID […]

如何按键对字典进行排序

我有字典Dictionary 键是c1,c3,c2,t1,t4,t2我想将它们排序为c1,c2,c3,t1,t2,t3 我正在尝试使用它进行排序 Input.OrderBy(key => key.Key ); 但它不起作用 任何想法如何解决这个问题