我所拥有的是一串逗号分隔的ID,我从查询字符串(例如23,51,6,87,29)收到这些ID。或者,该字符串可以说“全部”。
在我的Linq查询中,我需要一种方式来说(伪代码):
from l in List<>
where l.Id = all_of_the_ids_in_csv
&& other conditions
select new {...}
我只是不确定如何去做。我甚至不确定谷歌会让我朝着正确的方向前进。任何指向正确方向的人都会非常有帮助。
答案 0 :(得分:3)
我建议将您的查询拆分为2 - 第一部分将按ID选择,而选择的部分将选择其他条件。
首先:检查查询字符串是否包含数字,或只是all
:
var IEnumerable<ListItemType> query = sourceList;
if(queryStringValue != "All")
{
var ids = queryStringValue.Split(new[] { ',' })
.Select(x => int.Parse(x)) // remove that line id item.Id is a string
.ToArray();
query = query.Where(item => ids.Contains(item.Id));
}
from l in query
// other conditions
select new {...}
由于LINQ查询已经确定了执行,因此您可以构建类似的查询而不会出现性能问题。在您要求结果(通过ToList
调用或枚举)之前,不会执行查询。
答案 1 :(得分:0)
如果你真的只想要一个LINQ查询:
var idArray = all_of_the_ids_in_csv.Split(',');
from l in List<>
where (all_of_the_ids_in_csv == "All" || idArray.Contains(l.Id))
&& other conditions
select new {...}
答案 2 :(得分:0)
诀窍是使用string.Split
var ids = string.split(rawIdString, ",").ToList();
var objects = ids.Where(id=> /*filter id here */).Select(id=>new { /* id will be the single id from the csv */ });
// at this point objects will be an IEnumerable<T> where T is whatever type you created in the new statement above