Tag: linq

在LINQ结果上将IEnumberable 转换为List ,导致巨大的性能损失

在LINQ结果上你喜欢这样: var result = from x in Items select x; List list = result.ToList(); 但是, ToList真的很慢,是否会使列表变得可变,因此转换速度很慢? 在大多数情况下,我可以设法让我的IEnumerable或Paralell.DistinctQuery但现在我想将项目绑定到DataGridView,因此我需要作为其他东西而不是IEnumerable ,关于如何获得ToList或任何性能的建议替换? 在IEnumerable中的10个百万记录中, .ToList大约需要6秒钟。

解决ASP.NET MVC中的LINQ查询性能问题

加入新表后,我遇到LINQ查询问题。 实际上,它返回我期望的数据,并且在测试中运行得很快。 但是,似乎随着越来越多的用户连接到数据库,查询开始超时。 例如,在生产中的前30或45分钟内一切正常,但是在大约上午8:20,它开始超时。 同样,我认为这是由于整体上数据库的使用增加。 以下是ASP.NET MVC(5)应用程序的一些背景知识,如果有帮助的话。 用户向我们的诊所提交转诊 推荐包含一个或多个订单 如果提供的人员信息与现有人员不匹配,我会做几件事,包括在“订单”表中插入记录(在推荐中选择的每个订单的一个记录)。 如果提供的人员信息与我们系统中的现有人员匹配,那么我将“推荐”保留在队列中,直到通过将其与现有人员匹配或通过覆盖并在系统中创建新人员来手动解决。 此时,在表格中创建在引荐中选择的任何订单。 因此,在这种情况下要考虑的两个主要表是“推荐”(在我的代码中命名为“Referrals”)和“order”(在我的代码中命名为“ReferralPPAs”)表。 到目前为止,我还不需要将有问题的查询从Referrals表链接到ReferralPPAs表(将查询链接到ReferralPPAs表似乎是在数据库/应用程序使用增加时减慢查询的速度)。 此外,如果这有帮助,推荐由外部用户输入,而我从推荐创建的订单在一个单独的应用程序中工作,内部人员作为用户,尽管它们都在同一个数据库中。 ReferralPPAs表可能在一天中的大部分时间都被大量使用。 查询如下所示: IQueryable referrals = (from r in _context.Referrals join cu in _context.ClinicUsers on r.ClinicId equals cu.ClinicId /* Here is the seemingly problematic join */ from ppa in _context.ReferralPPAs .Where(p => p.ref_id == r.seq_no.ToString()) .DefaultIfEmpty() /* End of seemingly problematic […]

LINQ – 复杂排序

我正在使用LINQ(C#)查询Order元素表。 每个订单都包含以下字段: – ID – OpenDate – PriorityID – StatusID – Description StatusID字段映射到Status表。 Status表的结构如下: – ID – Name 我需要按照优先级和状态对所有Order对象进行排序。 我可以成功获取按优先级排序的Order对象。 我是通过以下方式做到的: List orders = new List(); using (DBDataContext context = new DBDataContext()) { orders = (from o in context.Orders orderby (o.PriorityID.HasValue ? o.PriorityID : Int32.MaxValue) ascending select o).ToList(); } 但我的问题是考虑到状态。 一旦订单对象按优先级排序,我需要按以下状态顺序对Order对象进行排序:Cancelled,Open,In-Route和Delivered。 值得注意的是,这些状态值的ID是以随机,无用的顺序设置的。 我无法改变它们。 你可以告诉我,我也不能按照alphbetical名称对状态进行排序。 另外,我无法向我的数据库添加任何字段。 […]

使用多个根节点展平IEnumerable并选择Id属性

我有以下层次结构,我需要展平它并选择所有Id 。 我试过像这样使用SelectMany() .SelectMany(node => node.Children).Select(node => node.Id) 。 这将产生3,5,6的列表。 是否有可能使用Linq获得完整列表1,2,3,4,5,6,7 ? 节点(Id = 1) 节点(Id = 2) 节点(Id = 3) 节点(Id = 4) 节点(Id = 5) 节点(Id = 6) 节点(Id = 7)

智能表达翻译

我正在创建一个IQueryable,我想用它来传递给entity framework的查询。 我的存储库不公开可查询。 var query = new List().AsQueryable().Where(x => x.Property == “argument”); 我的存储库中有一个方法可以接收IQueryable。 如何使用相同的可查询来查询我的DbSet? 我试图从可查询中提取表达式为dbset构建一个新的表达式。 这是我到目前为止,但它不起作用: public IDbSet DbSet { get; set; } public IEnumerable Find(IQueryable queryable) { var parameter = Expression.Parameter(typeof (TEntity)); var body = queryable.Expression; var lambda = Expression.Lambda<Func>(body, parameter); var result = DbSet.Where(lambda); return null; } 当我尝试使用以下错误创建lambda时代码失败:类型’System.Linq.IQueryable`1 [MyTEntity]’的表达式不能用于返回类型’System.Boolean’ 我显然没有正确构建表达式,我缺少什么? 有没有更简单的方法来做我想要完成的事情? 我还看到一些示例表明Expression应该有一个参数属性。 但无论我转换为什么类型的表达式类型,并且这个是ConstantExpression,我都没有看到IQueryable.Expression中的参数属性。

linq sql最接近数字

我有一张桌子 Id Number 1 9 2 10 3 12 4 19 5 20 选择Id,其中Number最接近18,它应返回第4行,即19 我如何在linq和tsql中写这个? 谢谢

使用linq合并具有相同结构的多个XML文件,并根据键删除重复项

我有多个XML文件,我正在尝试合并到一个文件中。 Linq to XML可能是最好的选择,但我对创意持开放态度(XSLT似乎很擅长合并两个文件,但在n> 2或n = big时很笨拙)。 从这里阅读其他问题,某种联系看起来很好。 File1.xml: File2.xml: Merged.xml: 即它根据第三个/ @id属性合并值。 我如何用linq优雅地做到这一点?

如果FirstOrDefault返回null,则返回列表中的第一项

我有一个产品List ,我需要从列表中获取具有我从查询字符串参数获得的特定产品Id的项目。 但是,我可能并不总是将产品Id传递给我。 如果我没有产品Id ,我需要默认使用列表中的第一个产品。 目前我有: @Model.Products.FirstOrDefault(x => x.Id == productId); 这只是选择具有该特定Id的产品,如果没有,则默认为null 。 有没有办法实现我想要的?

为什么我不能在linq查询中调用函数?

这是我的linq查询(Linq to Sql): pagina = (from Pagine page in kDataBase.Pagines where prova(page.title_it) == urlSuddivisa[i].ToLower() select page).FirstOrDefault(); 这是我调用的函数(在同一个类中): private string prova(string example) { return example; } 它说 : 对于方法’System.String prova(System.String),不支持转换为sql。 我哪里错了? 我该如何解决?

如何指定谓词的类型,直到运行时我才知道?

我的存储库方法从数据库中提取东西。 它接受排序顺序作为参数: IEnumerable getCars(Expression<Func> sort); 我使用TSortKey ,因为我不知道在运行时将使用哪个属性,它可能是x => x.Name或x => x.Make是字符串,但也可能是x => x.History.Age是一个整数。 用户选择排序顺序,然后在交换机中设置排序谓词并调用该方法。 Expression<Func> sortPredicate; switch (sortOption) { case SortOption.Name: sortPredicate = s => s.Name; break; case SortOption.Make: sortPredicate = s => s.Make; break; case SortOption.Age: sortPredicate = s => s.History.Age; break; default: sortPredicate = s => s.Name; break; } var cars = repo.getCars(sortPredicate); […]