加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

sql – 实体框架掷中2100参数限定

发布时间:2021-01-23 01:13:11 所属栏目:编程 来源:网络整理
导读:我正在将一些代码从LINQ-to-SQL迁徙到Entity Framework.早年,当从SQL Server(描写为 here)的2100参数限定运行时,我行使了Marc Gravell here提供的办理方案.如他本身的相应中所述,它不合用于Entity Framework. 我对表达式完全没有履历,知道从那边开始,但我正在

我正在将一些代码从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中界说)

这会发生预期的功效(以块的情势执行查询),而且按照列表中的项目数目,块的巨细可以比非分块的办理方案更有用.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读