linq-to-entity List/Array.Contains 使用“WHERE (... OR ...)”而不是“WHERE ... IN (...)”编译查询

问题描述 投票:0回答:0

EntityFramework v6.0

IBM.Data.DB2.EntityFramework v10.5

.NET Framework v4 / C# v4.0(是的,正在升级)

例子:

List<long> myIds = new List<long>{ 12345, 23456, 34567 };

IQueryable<myModel> myCollection = (from a in context.TBL_ONE
                                    join b in context.TBL_TWO on a.ENTY equals b.ENTY
                                    select new myModel()
                                    {
                                         LINE_ID = a.LINE_ID
                                    }).AsQueryable();

var results = myCollection.Where(x => myIds.Contains(x.LINE_ID)).ToList(); // here is the issue...

“myCollection”会非常大,“myIds”集合也会很大。

所以希望它编译为“SELECT ... WHERE LINE_ID IN (12345, 23456, 34567);”

然而,它编译为“SELECT ... WHERE LINE_ID = 12345 OR LINE_ID = 23456 OR LINE_ID = 34567;”

我已经尝试过 HashSet、List 和 Array——不管是大的还是小的,它们都给出了相同的编译风格。这是因为过时的 linq 或 .net 版本吗?

如果我能提供更多信息或格式,请告诉我,我还是个初学者。谢谢

c# .net linq db2 linq-to-entities
© www.soinside.com 2019 - 2024. All rights reserved.