小编典典

我如何使用LINQ Contains(string [])而不是Contains(string)

c#

我有一个大问题。

我得到了一个linq查询,使其看起来像这样:

from xx in table
where xx.uid.ToString().Contains(string[])
select xx

string[]数组的值应为(1,45,20,10,etc …)

的默认.Contains值为.Contains(string)

我需要它来代替: .Contains(string[])

编辑: 一位用户建议为编写扩展类string[]。我想学习如何,但是有人愿意指出正确的方向吗?

编辑: uid也将是一个数字。这就是为什么它将转换为字符串的原因。

帮助任何人?


阅读 356

收藏
2020-05-19

共1个答案

小编典典

spoulson几乎是正确的,但是您需要List<string>从头string[]开始创建一个。实际上,List<int>如果uid也为a
会更好intList<T>支持Contains()。这样做
uid.ToString().Contains(string[])意味着将uid作为字符串包含数组的所有值作为子字符串。即使您确实编写了扩展方法,其含义也将是错误的。

[编辑]

除非您string[]按照Mitch Wheat的演示进行更改并为其编写,否则您就可以跳过转换步骤。

[ENDEDIT]

如果不使用扩展方法,这就是您想要的(除非您已经将潜在的uid的集合作为int
-而是使用它List<int>())。这使用了链式方法语法,我认为它更干净,并且将其转换为int以确保查询可以与更多提供程序一起使用。

var uids = arrayofuids.Select(id => int.Parse(id)).ToList();

var selected = table.Where(t => uids.Contains(t.uid));
2020-05-19