[英]C# Linq Select Rows Where ID Equals ID in CSV
我所擁有的是一串逗號分隔的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 {...}
我只是不確定該怎么做。 我甚至不確定谷歌會讓我朝着正確的方向前進。 任何指向正確方向的人都會非常有幫助。
我建議將您的查詢拆分為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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.