现有的旧版代码如下:
List<object> myItems;
//myItems gets populated by a method call
foreach (object[] item in myItems)
{
string Id = item[0].ToString();
string Number = item[1].ToString();
//now do some processing if Number satisfies some criteria
}
想要使用linq进行转换,以选择与某个Id
匹配的所有Number
。
所有建议将不胜感激。
谢谢。
答案 0 :(得分:3)
使用Select()
和Where()
bool IsSatisfyingNumber(String number) {
// True if number satisfies some criteria
}
List<String> matchingIds = myItems
.Where(item => IsSatisfyingNumber(item[1].ToString()))
.Select(item => item[0].ToString())
.ToList();
答案 1 :(得分:0)
列表myItems
包含类型为object
的项目,其中每个项目实际上都是object[]
,因此我们需要先强制转换为object[]
,然后根据搜索了certain number
。
string certainNumber = "1";
var myIds = myItems
.Where(o => ((object[]) o)[1].ToString() == certainNumber)
.Select(o => ((object[]) o)[0].ToString());
字符串上的equality operator执行an ordinal (case-sensitive and culture-insensitive) comparison
,因此如果您需要进行某种不同的比较,请在Where...
中进行更改。
答案 2 :(得分:0)
使其正常运行并希望共享信息:
var myIds =
(from item in myItems.Cast<object[]>()
select new
{ Id = item[0], Number = (string)item[1] }
)
.Where(x => x.Number == filtercondition)
.Select(x => (string)x.Id)
.ToList();