sql – 实体框架掷中2100参数限定
我正在将一些代码从LINQ-to-SQL迁徙到Entity Framework.早年,当从SQL Server(描写为 here)的2100参数限定运行时,我行使了Marc Gravell here提供的办理方案.如他本身的相应中所述,它不合用于Entity Framework. 我对表达式完全没有履历,知道从那边开始,但我正在探求的是基内情同的扩展要领,但合用于实体框架.提前感激您提供的任何辅佐. 办理要领EF中不存在2100参数限定题目.我在the AdventureWorks database上运行了一个测试(在SQL Express 2008 R2中):我正在实行将全部产物放在ProductCategoryId的值范畴内(1,2,3). 行使LINQ,天生的SQL WHERE子句如下所示: WHERE [t0].[ProductCategoryID] IN (@p0,@p1,@p2) -- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1] -- @p1: Input Int (Size = -1; Prec = 0; Scale = 0) [2] -- @p2: Input Int (Size = -1; Prec = 0; Scale = 0) [3] (导致最大参数编号题目),而行使EF 4.0,它看起来像这样: WHERE [Extent1].[ProductCategoryID] IN (1,3) 接下来,我用EF测试了这个值,列出了3000个值: var categoryList = Enumerable.Range(1,3000).Select(i => (int?)i).ToArray(); using (var aw = new AdventureWorksEntities()) { var products = aw.Products .Where(p => categoryList.Contains(p.ProductCategoryID)) .ToList(); } 固然这长短常低效的,但它起浸染并发生预期的功效. 可是,也可以行使带有EF的InRange扩展provided by Marc Gravell,也可以行使LINQKit library,如下所示: using (var aw = new AdventureWorksEntities()) { var products = aw.Products .AsExpandable() .InRange(p => p.ProductCategoryID,1000,categoryList) .ToList(); } (AsExpandable扩展在LINQKit中界说) 这会发生预期的功效(以块的情势执行查询),而且按照列表中的项目数目,块的巨细可以比非分块的办理方案更有用. (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |