C# Linq Select Rows Where ID Equals ID in CSV
本文关键字:ID Equals CSV in Where Linq Select Rows | 更新日期: 2023-09-27 18:07:13
我所拥有的是我从查询字符串(例如23,51,6,87,29)接收的逗号分隔的id字符串。或者,该字符串可以直接写"all"。
在我的Linq查询我需要一种方式说(在伪代码):
from l in List<>
where l.Id = all_of_the_ids_in_csv
&& other conditions
select new {...}
我只是不知道该怎么做。我甚至不知道该用谷歌搜索什么才能找到正确的方向。任何指向正确方向的指引都会非常有帮助。
我建议将您的查询分成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
调用或枚举)。
如果你真的只需要一个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 {...}
技巧是使用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