LINQ风格的IS IN查询

bum*_*una 8 c# linq lambda

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

SELECT ownerid where sysid in ('', '', '') -- i.e. List<string>
Run Code Online (Sandbox Code Playgroud)

或者喜欢

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

我一直在玩a.sysid.Contains(),但却无法到达任何地方.

Jon*_*eet 11

Contains 是前进的方向:

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

HashSet<string>考虑到所有包含的检查,在性能方面,你最好使用而不是列表.(假设会有相当多的条目...对于少量的值,它不会产生很大的差别,List<string>甚至可能更快.)

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

  • 对于像Linq to SQL这样的东西,HashSet不会有任何区别,因为它只需要列表中的所有元素并生成IN子句. (3认同)
  • @mellamokb [老兄,他是jon双向飞碟](http://stackoverflow.com/questions/343852/whats-a-good-algorithm-to-determine-if-an-input-is-a-perfect-square#comment178355_343862) (2认同)