簡體   English   中英

C#Linq選擇ID等於CSV的行ID

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM