LINQ 风味正在查询中

本文关键字:查询 LINQ | 更新日期: 2023-09-27 18:31:13

还有很多

其他类似的问题,但它们似乎都没有做我想做的事情。 我想传入字符串和查询列表

SELECT ownerid where sysid in ('', '', '') -- i.e. List<string>

或喜欢

var chiLst = new List<string>();
var parRec = Lnq.attlnks.Where(a => a.sysid IN chiList).Select(a => a.ownerid);

我一直在使用 a.sysid.Contains(),但一无所获。

LINQ 风味正在查询中

Contains是前进的方向:

var chiLst = new List<string>();
var parRec = Lnq.attlnks.Where(a => chiList.Contains(a.sysid))
                        .Select(a => a.ownerid);

尽管在性能方面,考虑到所有包含检查,您最好使用 HashSet<string> 而不是列表。(这是假设会有相当多的条目...对于少量值,无论哪种方式都不会有太大区别,List<string>甚至可能更快。

请注意,性能方面假设您为此使用 LINQ to Objects - 如果您使用的是 LINQ to SQL 之类的东西,这无关紧要,因为无论如何都不会在进程中完成Contains检查。

你不会调用a.sysid.Contains;IN(SQL)的语法与Contains(LINQ)的语法相反。

var parRec = Lnq.attlnks.Where(a => chiList.Contains(a.sysid))
                        .Select(a => a.ownerid);

除了Contains方法之外,您还可以join

var parRec = from a in Lnq.attlnks
             join sysid in chiLst
                 on a.sysid equals sysid
             select a.ownerid

我不确定这是否会比使用 HashSet Contains做得更好,但它至少会具有类似的性能。 它肯定会比将Contains与列表一起使用更好。