簡體   English   中英

如何轉換為int然后在linq查詢中進行比較C#

[英]How to convert to int and then compare in linq query c#

IEnumerable<classB> list = getItems();
//dt is datatable

list = list.Where(x => Convert.ToInt32( !dt.Columns["Id"]) == (x.Id));

我只想將與datatable id列匹配的項目保留在列表中。 其余的將被刪除。 我做錯了。

數據表可以具有:ID-1,3,4,5,7列表可以具有:ID-1,2,3,4,5,6,7,8,9,10

我希望輸出列表具有:ID-1,3,4,5,7

您的代碼無法正常工作,因為您正在將列的定義與整數值進行比較。 這不是明智的比較。

您可以做的是將數據表中的所有值放入一個可以有效搜索的集合中,然后獲取列表中該集合中的所有項目:

var ids = new HashSet<int>(dt.AsEnumerable()
    .Select(row => row.Field<int>("Id"));
list = list.Where(x => ids.Contains(x.Id));

試試這個

var idList = dt.AsEnumerable().Select(d => (int) d["Id"]).ToList();
list = list.Where(x => idList.Contains(x.Id));

你不能那樣做。 您的dt.Columns [“ Id”]返回DataColumn,而不是特定數據行中該列內的值。 您需要在兩個linq查詢之間進行聯接,第一個查詢已經存在,而另一個則需要從DataTable中獲取。

var queryDt = (from dtRow in dt
              where !dtRow.IsNull("Id")
              select int.Parse(dtRow["Id"])).ToList();

現在加入

var qry = from nonNull in queryDt 
          join existing in list on nonNull equals list.id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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