Tag: linq

LINQ TO DataSet:数据表上的多个分组

我正在使用Linq数据集来查询数据表。 如果我想在数据表上的“Column1”上执行一个组,我使用以下查询 var groupQuery = from table in MyTable.AsEnumerable() group table by table[“Column1”] into groupedTable select new { x = groupedTable.Key, y = groupedTable.Count() } 现在我想在两列“Coulmn1”和“Column2”上执行group by。 任何人都可以告诉我语法或者在数据表中提供一个解释多个组的链接吗? 谢谢

linq2entities的IQueryable扩展方法

我正在尝试实现一个与linq2entities一起使用的扩展方法。 我最初假设如果我的扩展方法接受并返回了一个IQueryable,并且只要我的表达式只使用了受支持的方法,那么它就能正常工作。 我有很多麻烦,所以作为最后的手段,我复制了一个我知道工作的现有.NET扩展方法(FirstOrDefault)并简单地重命名它。 看起来它会根据方法返回的表达式来评估“无法转换为商店表达式”validation,而不是方法本身的名称。 var prs = db.People.Where(p => p.PersonKey == 15).Select(p => new { id = p.PersonKey, name1 = p.PersonHistories.AsQueryable().AsOf().Name } ).ToList(); 我的扩展方法,它只是我重命名的FirstOrDefault的副本: public static TSource AsOf(this IQueryable source) { return source.Provider.Execute(Expression.Call(null, ((MethodInfo)MethodBase.GetCurrentMethod()).MakeGenericMethod(new Type[] { typeof(TSource) }), new Expression[] { source.Expression })); } 错误: LINQ to Entities does not recognize the method ‘Models.PersonHistory AsOf[PersonHistory](System.Linq.IQueryable`1[Models.PersonHistory])’ […]

使用EntityFramework.Core从自引用表加载完整层次结构

解释为什么这个问题不同于: EF – 多个包括急切加载分层数据。 不好的做法? 可能的重复是基于意见的问题,如果这是一个不好的做法,而我的问题往往得到如何做的技术解决方案,独立于意见,如果这是一个好的做法。 我将此决定留给产品所有者,需求工程师,项目经理和想要该function的客户。 给出的答案要么解释为什么这是一个不好的做法,要么使用一种对我不起作用的方法(使用Include()和ThenInclude()产生硬编码深度,而我需要灵活的深度)。 在当前项目(.NET核心web api)中,我尝试从自引用表中加载层次结构。 经过谷歌搜索后,我很惊讶这样的任务(我认为这是微不足道的)似乎并不是微不足道的。 好吧,我有这个表来形成我的层次结构: CREATE TABLE [dbo].[Hierarchy] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Parent_Id] INT NULL, [Name] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_Hierarchy_Hierarchy] FOREIGN KEY ([Parent_Id]) REFERENCES [dbo].[Hierarchy] ([Id]) ); 在web api中,我尝试返回完整的层次结构。 一个可能特别的事情(可能会有所帮助)就是我要加载完整的表格。 我也知道我可以使用预先加载和导航属性(子项的Parent和InverseParent) _dbContext.Hierarchy.Include(h => h.InverseParent).ThenInclude(h => h.InverseParent)… 问题是这会加载硬编码深度(例如,如果我使用1 […]

entity framework – 查询多对多关系表

我有一个多对多的关系定义如下: Employees ————– EmployeeID (PK) Roles ————– RoleID (PK) EmployeeRoles ————– EmployeeID (PK, FK) RoleID (PK, FK) 我正在尝试获取一个Employees列表,给出一个列表或RoleIDs: private MyDBEntities _entities; public SqlEmployeesRepository(MyDBEntities entities) { _entities = entities; } public IQueryable GetEmployeesForRoles(int[] roleIds) { // get employees } 但是,如果我尝试执行_entities.EmployeeRoles ,则没有EmployeeRoles对象。 我的edmx看起来像这样: 所以它识别了两个表之间的关系,但它没有为EmployeeRoles创建一个实体对象。 如何获得角色ID列表的员工列表?

LinqKit System.InvalidCastException在成员属性上调用方法提供的表达式时

给定一个简单的父/子类结构。 我想使用linqkit在父级上应用子lambda表达式。 我还希望Lambda表达式由实用程序方法提供。 public class Foo { public Bar Bar { get; set; } } public class Bar { public string Value { get; set; } public static Expression<Func> GetLambdaX() { return c => c.Value == “A”; } } … Expression<Func> lx = c => Bar.GetLambdaX().Invoke(c.Bar); Console.WriteLine(lx.Expand()); 上面的代码抛出 System.InvalidCastException: Unable to cast object of type […]

LINQ有多少钱?

我正在研究LINQ,并且查询语言出现(至少在表面上)只不过是Haskell和其他FP语言中的地图和/或列表推导的实现(特别是’map’和’的概括)为’在斯卡拉)。 它是否正确? 语法是否比这更多? 从我正在阅读的这本书(“Essential LINQ”)的令人窒息的语气来看,这里似乎有一些新的或创新的东西。 有整个后端,管道,一阶表达式树和类型等来实现LINQ,但我的问题是关于查询语言本身。 干杯 乔

LINQ将数据表映射到列表

我刚发现LINQ,请跟我一起全面! 🙂 所以! 我有一个数据层,它为我提供数据表,我想将它们转换为对象列表。 这些对象在spécific层DTO(数据传输对象)中定义。 如何将数据表的每一行映射到对象中并将所有对象放入列表中? (今天我在场后“手动”字段)是否可以使用LINQ? 我听说过LINQ2Entities? 我对吗? 感谢帮助初学者理解……

JContainer,JObject,JToken和Linq混淆

我无法理解何时使用JContainer , JObject和JToken 。 我从“标准”中JObject是由JObject组成的,而JToken是所有JToken类型的基本抽象类,但我不理解JContainer 。 我正在使用C#,我刚买了LinqPad Pro 5。 我在一个文件中有一个JSON数据源,所以我使用这个语句成功地反序列化了该文件的内容: string json; using (StreamReader reader = new StreamReader(@”myjsonfile.json”)) { json = reader.ReadToEnd(); } 那时,我接受JSON字符串对象并将其反序列化为JObject (这可能是我的错误 – 也许我需要使jsonWork成为JToken或JContainer ?): JObject jsonWork = (JObject)JsonConvert.DeserializeObject(json); 在我的JSON数据(由JSON表示的字符串)中,我有三个对象 – 顶级对象看起来类似于: { “Object1” : { … }, “Object2” : { … }, “Object3″ : { … } } 每个对象都由各种标记(数组,字符串,其他对象等)组成,因此它是动态JSON。 (我使用省略号作为占位符,而不是用大量的JSON数据混淆这个问题。) 但是,我想使用LINQ分别处理”Object1” […]

LINQ性能计数vs Where和Count

public class Group { public string Name { get; set; } } 测试: List _groups = new List(); for (int i = 0; i x.Name == group.Name); } _stopwatch2.Stop(); Console.WriteLine(_stopwatch2.ElapsedMilliseconds); Stopwatch _stopwatch = new Stopwatch(); _stopwatch.Start(); foreach (var group in _groups) { var count = _groups.Where(x => x.Name == group.Name).Count(); } _stopwatch.Stop(); Console.WriteLine(_stopwatch.ElapsedMilliseconds); 结果:第一名:2863,第二名2185 有人可以解释一下为什么第一种方法比第二种方法慢? […]

如何判断IEnumerable 是否会延迟执行?

我总是假设如果我在LINQ对象的上下文中使用Select(x=> …) ,那么新的集合将立即创建并保持静态。 我不太清楚为什么我这么做,这是一个非常糟糕的假设,但我做到了。 我经常在其他地方使用.ToList() ,但在这种情况下通常不会。 此代码演示即使是简单的“选择”也会延迟执行: var random = new Random(); var animals = new[] { “cat”, “dog”, “mouse” }; var randomNumberOfAnimals = animals.Select(x => Math.Floor(random.NextDouble() * 100) + ” ” + x + “s”); foreach (var i in randomNumberOfAnimals) { testContextInstance.WriteLine(“There are ” + i); } foreach (var i in randomNumberOfAnimals) { testContextInstance.WriteLine(“And […]