【发布时间】:2017-03-31 17:58:00
【问题描述】:
我正在使用 Linq to entity 来查询数据库以获取 int 列表以进行进一步处理。我有两种方法可以得到如下列表:
首先是:
List<int> lstBizIds = new List<int>() { 1, 2, 3, 4, 5 };
List<int> lstProjectIds = context.Projects.Where(x => lstBizIds.Contains(x.businessId)).Select(x => x.projectId).ToList();
其次是:
List<int> lstBizIds = new List<int>() { 1, 2, 3, 4, 5 };
List<int> lstProjectIds = context.Projects.Join(lstBizIds, p => p.businessId, u => u, (p, u) => p.projectId).ToList();
现在我的问题是,上述哪种方法的性能更好?如果第一个列表(即 lstBizIds 的大小增加)也会影响性能吗?如果会降低性能,请向我建议其他实施方式。
【问题讨论】:
-
您确定您的第一个选项有效吗?查询是否执行并给你一个结果?
-
是的,肯定会奏效的。
-
对不起,我的意思是第二个选项。无论如何,我假设你都成功地尝试了。
-
与性能无关,但在两者之间做出决定时的另一个注意事项是,无论如何,在 EF Core 中,不同的连接器/提供程序在执行
WhereIN与JOIN时会以不同的方式转义字符.这个just bit me 带有用于 EF Core 的 Pomelo MySQL,但可以存在于我认为的任何提供程序中。
标签: c# sql-server entity-framework lambda linq-to-entities