我有一个大问题。
我得到了一个linq查询,使其看起来像这样:
from xx in table where xx.uid.ToString().Contains(string[]) select xx
string[]数组的值应为(1,45,20,10,etc …)
string[]
的默认.Contains值为.Contains(string)。
.Contains
.Contains(string)
我需要它来代替: .Contains(string[])…
.Contains(string[])
编辑: 一位用户建议为编写扩展类string[]。我想学习如何,但是有人愿意指出正确的方向吗?
编辑: uid也将是一个数字。这就是为什么它将转换为字符串的原因。
帮助任何人?
spoulson几乎是正确的,但是您需要List<string>从头string[]开始创建一个。实际上,List<int>如果uid也为a 会更好int。 List<T>支持Contains()。这样做 uid.ToString().Contains(string[])意味着将uid作为字符串包含数组的所有值作为子字符串。即使您确实编写了扩展方法,其含义也将是错误的。
List<string>
List<int>
int
List<T>
Contains()
uid.ToString().Contains(string[])
[编辑]
除非您string[]按照Mitch Wheat的演示进行更改并为其编写,否则您就可以跳过转换步骤。
[ENDEDIT]
如果不使用扩展方法,这就是您想要的(除非您已经将潜在的uid的集合作为int -而是使用它List<int>())。这使用了链式方法语法,我认为它更干净,并且将其转换为int以确保查询可以与更多提供程序一起使用。
List<int>()
var uids = arrayofuids.Select(id => int.Parse(id)).ToList(); var selected = table.Where(t => uids.Contains(t.uid));