8

还有很多与此类似的其他问题,但似乎没有一个能做我想做的事情。我想传入一个字符串列表和查询

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() 但无法到达任何地方。

4

3 回答 3

11

Contains是前进的方向:

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

HashSet<string>尽管考虑到所有包含检查,就性能而言,您最好使用 a而不是列表。(这是假设会有相当多的条目......对于少量的值,它不会有太大的区别,而且 aList<string>甚至可能更快。)

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

于 2012-04-16T18:22:27.723 回答
1

你不会打电话的a.sysid.Contains;(SQL) 的语法与(LINQ)IN的语法相反Contains

var parRec = Lnq.attlnks.Where(a => chiList.Contains(a.sysid))
                        .Select(a => a.ownerid);
于 2012-04-16T18:23:31.763 回答
1

除了该Contains方法,您还可以join

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

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

于 2012-04-16T18:28:33.757 回答