Tag: linq to entities

在内存集合和EntityFramework之间加入

是否有任何机制可以在保留顺序的同时在内存中集合和entity framework之间进行JOIN。 我在想的是 var itemsToAdd = myInMemoryList.Join(efRepo.All(), listitem => listitem.RECORD_NUMBER, efRepoItem => efRepoItem.RECORD_NUMBER, (left, right) => right); 这给了我一个相当奇怪的标题“这个方法支持LINQ to Entities基础结构,而不是直接在你的代码中使用。” 错误。 当然,我可以用类似的东西迭代地做到这一点 foreach (var item in myInMemoryList) { var ho = efRepo.Where(h => h.RECORD_NUMBER == item.RECORD_NUMBER).FirstOrDefault(); tmp.Add(ho); } 但这是一个N + 1查询。 哪个是讨厌的,因为myInMemoryList可能非常大! Resharper可以为我重构 tmp = (from TypeOfItemInTheList item in myInMemoryList select efRepo.Where(h => h.RECORD_NUMBER == […]

LINQ生成带有重复嵌套选择的SQL

我是.NETentity framework的新手,我认为这很棒,但不知怎的,我得到了这个奇怪的问题(抱歉西class牙语,但我的程序是用那种语言,无论如何这不是什么大问题,只是列或属性名称):我正在进行正常的LINQ To Entities查询以获取UltimaConsulta列表,如下所示: var query = from uc in bd.UltimasConsultas select uc; UltmasConsultas是一个观点,顺便说一句。 问题是LINQ正在为查询生成此SQL: SELECT [Extent1].[IdPaciente] AS [IdPaciente], [Extent1].[Nombre] AS [Nombre], [Extent1].[PrimerApellido] AS [PrimerApellido], [Extent1].[SegundoApellido] AS [SegundoApellido], [Extent1].[Fecha] AS [Fecha] FROM (SELECT [UltimasConsultas].[IdPaciente] AS [IdPaciente], [UltimasConsultas].[Nombre] AS [Nombre], [UltimasConsultas].[PrimerApellido] AS [PrimerApellido], [UltimasConsultas].[SegundoApellido] AS [SegundoApellido], [UltimasConsultas].[Fecha] AS [Fecha] FROM [dbo].[UltimasConsultas] AS [UltimasConsultas]) AS [Extent1] 为什么LINQ生成嵌套的Select? […]

由于派生表,entity framework很慢

我使用MySQL Connector / Net 6.5.4与LINQ实体,我经常得到糟糕的查询性能,因为entity framework生成使用派生表的查询。 这是我多次遇到的简化示例。 在C#中,我写了一个这样的查询: var culverCustomers = from cs in db.CustomerSummaries where cs.Street == “Culver” select cs; // later… var sortedCustomers = culverCustomers.OrderBy(cs => cs.Name).ToList(); 而不是像这样生成简单的查询: SELECT cust.id FROM customer_summary cust WHERE cust.street = “Culver” ORDER BY cust.name entity framework使用派生表生成一个查询,如下所示: SELECT Project1.id FROM ( SELECT cust.id, cust.name, cust.street FROM customer_summary cust […]

像LINQ to Entities中的运算符或使用通配符一样

我正在使用LINQ 2实体。 以下是问题: string str = ‘%test%.doc%’ .Contains(str) // converts this into LIKE ‘%~%test~%.doc~%%’ 预期转换:LIKE’%test%.doc%’ 如果它是LINQ 2 SQL,我可以使用SqlMethods.Like,因为有人在我之前的问题中回答了它。 但是现在因为我使用L2E而不是L2S,我需要其他解决方案。

IQueryable OrderBy with Func :发生了什么

使用此问题给出的代码, 在传递选择器函数时,OrderBy不会转换为SQL Func f = x => x.Name; var t = db.Table1.OrderBy(f).ToList(); 翻译的SQL是: SELECT [Extent1].[ID] AS [ID], [Extent1].[Name] AS [Name] FROM [dbo].[Table1] AS [Extent1] 好。 我可以理解代码编译: IQueryableinheritance自IEnumerable ,它有一个OrderBy方法,以Func作为参数。 我可以理解,ORDER BY子句不是在SQL中生成的,因为我们没有将Expression<Func>作为OrderBy参数传递(IQueryable的参数) 但是场景背后会发生什么? “错误的”OrderBy方法会发生什么? 没有 ? 我无法看到如何以及为什么……我夜晚的任何光明?

如何使用Linq to Entities处理大型结果集?

我有一个相当复杂的linq to entity查询,我在网站上显示。 它使用分页,所以我从来没有一次下载超过50条记录进行显示。 但我也想让用户选择将完整结果导出到Excel或其他一些文件格式。 我担心的是,一次可能会有大量的记录被加载到内存中来执行此操作。 有没有办法一次处理linq结果集1记录,就像你可以使用datareader一样,所以一次只能在内存中保存1条记录? 我已经看到了一些建议,如果你使用foreach循环对linq查询进行枚举,记录将不会立即全部读入内存并且不会过度使用服务器。 有没有人有我可以阅读的东西的链接来validation这一点? 我很感激任何帮助。 谢谢

使用Table Per Hierarchyinheritance在LINQ to Entities查询中转换为派生类型

我有一个LINQ to实体模型与Table Per Hierarchyinheritance。 我有一个基类型的查询,我想做特定的类型相关的逻辑。 例如: IQueryable base = … // this works fine var result = base.Select(b => b is DerivedType1 ? 1 : 2).ToList(); // this doesn’t compile to SQL var result2 = base.Select(b => b is DerivedType1 ? ((DerivedType1)b).DerivedProperty : null).ToList(); 有没有办法做这样的事情而不分别处理每个派生类型的IQueryables: // I’d rather not do this: var resultA = base.OfType().Select(d […]

正确使用datacontext的“Using”语句

我正在使用Linq to Entities,最近,我发现很多人都建议将datacontext包装在这样的using语句中: Using(DataContext db = new DataContext) { var xx = db.customers; } 这是有道理的。 但是,我不确定如何在我的模型中加入这种做法。 例如:我有一个接口(让我们称之为客户),它由这样的存储库实现: namespace Models { public class rCustomer : iCustomer { readonly DataContext db = new DataContext(); public customer getCustomer(Guid id) { return db.customers.SingleOrDefault(por => por.id == id); } public iQueryable getTopCustomers() { return db.customers.Take(10); } //******************************************* //more methods using […]

从linq到实体查询动态构建选择列表

我正在寻找一种从iQueryable对象动态创建选择列表的方法。 具体的例子,我想做类似以下的事情: public void CreateSelectList(IQueryable(of EntityModel.Core.User entities), string[] columns) { foreach(var columnID in columns) { switch(columnID) { case “Type”: SelectList.add(e => e.UserType); break; case “Name”: SelectList.add(e => e.Name); break; etc…. } } var selectResult = (from u in entities select objSelectList); } 因此,所有属性都是已知的,但我事先并不知道要选择哪些属性。 这将通过columns参数传递。 我知道我将遇到selectResult类型的问题,因为当选择列表是动态的时,编译器不知道匿名类型的属性需要是什么。 如果上述情况不可能:我需要的方案如下: 我正在尝试创建一个可以实现的类来显示分页/过滤的数据列表。 这些数据可以是任何东西(取决于实现)。使用的linq是实体的linq。 所以它们直接链接到sql数据。 现在我只想选择我实际在列表中显示的实体的列。 因此我希望select是动态的。 我的实体可能有一百个属性,但如果列表中只显示了3个属性,我不想生成一个选择所有100列数据的查询,然后只使用其中的3个。 如果有一种我没有想到的不同方法,我会接受各种想法 编辑: 关于约束的一些澄清: […]

哪本是学习Linq的最佳书籍,包括Linq to Entities?

我听过很多关于Linq in Action一书的评论,但它没有涵盖Linq to Entities。 请提供您可能已阅读的书籍的反馈。