起初,我有一些 DataRows 到字典中。我做了一個例子來展示它是如何制作的以及我如何使用資料表進行相同的 linq 查詢。
我想通過示例搜索具有以“A”開頭且組態檔代碼為 2 的 UTI_SURNAME 值的記錄串列。
使用資料表,我將執行此代碼:
DataTable dt = new DataTable();
dt.Columns.Add("UTI_ICODE" , typeof(int));
dt.Columns.Add("UTI_NAME", typeof(string));
dt.Columns.Add("UTI_SURNAME", typeof(string));
dt.Columns.Add("PROFIL_ICODE", typeof(int));
dt.Rows.Add(1, "Name Arnaud", "Arnaud", 1);
dt.Rows.Add(2, "Name Armand", "Armand", 2);
dt.Rows.Add(3, "Name Armelle", "Armelle", 2);
dt.Rows.Add(4, "Name Basile", "Basile", 1);
dt.Rows.Add(5, "Name Bernard", "Bernard", 2);
List<Dictionary<string, object>> lstUTI = dt.AsEnumerable().Select(
row => dt.Columns.Cast<DataColumn>().ToDictionary(
column => column.ColumnName,
column => row[column]
)).ToList();
dt.AsEnumerable().Where(x => x.Field<string>("UTI_SURNAME").StartsWith("A") && x.Field<int>("PROFIL_ICODE") == 2).ToList();
dt 的結果是:

現在,我想以這種方式進行查詢以與串列 lstUTI 具有相同的結果:
lstUTI.Where(...).ToList();
我想要這樣的結果:

我怎樣才能用 LINQ 做到這一點?
uj5u.com熱心網友回復:
通過使用字典的索引運算子,您可以很容易地做到這一點:
var result = lstUTI.Where(dict =>
dict["UTI_SURNAME"].ToString().StartsWith("A")
&& (int)dict["PROFIL_ICODE"] == 2);
如果要列印結果:
foreach (Dictionary<string, object> row in result)
{
Console.WriteLine(new string('=', 10));
foreach (KeyValuePair<string, object> cell in row)
{
Console.WriteLine($"{cell.Key}: {cell.Value}");
}
}
那么輸出將如下所示:
UTI_ICODE: 2
UTI_NAME: Name Armand
UTI_SURNAME: Armand
PROFIL_ICODE: 2
==========
UTI_ICODE: 3
UTI_NAME: Name Armelle
UTI_SURNAME: Armelle
PROFIL_ICODE: 2
我想強調的是,上述解決方案不是防彈的。在對該值執行任何操作之前,您應該檢查該鍵是否存在。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/312951.html
下一篇:是否可以選擇為標記添加主題?
