[英]LINQ filter Elements based on two properties
我有唯一鍵字符串列表
var uniqueKeys = new List<string> {"01", "04", "09", "26", "27"};
我正在嘗試根據這些唯一鍵過濾另一個列表。
列表中的數據可以這樣看:
To From
01 05
01 02
09 04
01 09
01 45
04 06
27 12
我想以“ To”和“ From”屬性值都位於uniqueKeys中的方式從此列表中選擇數據
所需結果應為:
To From
09 04
01 09
我在互聯網上瀏覽過許多帖子,但我無法以簡單的LINQ格式編寫邏輯。
如果有人遇到此問題,請幫助我。
假設您的類名稱列表為“ listToFrom”。 您可以在兩個屬性上使用&&運算符以獲取所需的列表。
var filteredList = listToFrom.Where(x=>uniqueKeys.Contains(x.To) &&
uniqueKeys.Contains(x.From)).ToList();
您可以將多個語句放在.Where
以便可以在多個字段上進行過濾,在這種情況下,鍵為.Contains
。
//Making test data
List<Example> dataList = new List<Example>()
{
new Example() { From = "05", To = "01" },
new Example() { From = "02", To = "01" },
new Example() { From = "04", To = "09" },
new Example() { From = "09", To = "01" },
new Example() { From = "45", To = "01" },
new Example() { From = "06", To = "04" },
new Example() { From = "12", To = "27" }
};
var uniqueKeys = new List<string> { "01", "04", "09", "26", "27" };
//Filter data
var filteredList = dataList
.Where( row => uniqueKeys.Contains( row.To ) &&
uniqueKeys.Contains( row.From ) )
.ToList();
您可以使用.Contains
來檢查集合中是否包含項目。 另外,您可以使用LINQ .Where
來過濾具有指定條件的集合。
var uniqueKeys = new List<string> {"01", "04", "09", "26", "27"};
var result = data
.Where(x => uniqueKeys.Contains(x.From) && uniqueKeys.Contains(x.To))
.ToArray();
應該記住的另一件事-該算法是線性的,即它將每次都迭代uniqueKeys
以檢查它是否包含一個值。 性能可通過使用改進HashSet
提供O(1)
.Contains
檢查。
var uniqueKeys = new List<string> {"01", "04", "09", "26", "27"};
var uniqueKeysSet = new HashSet<string>(uniqueKeys);
var result = data
.Where(x => uniqueKeysSet.Contains(x.From) && uniqueKeysSet.Contains(x.To))
.ToArray();
但是,如果uniqueKeys
的項目數uniqueKeys
則可以跳過此性能改進。 它將不必要地使代碼復雜化。
可以通過如下組合兩個.Contains()
LINQ子句來完成:
var uniqueKeys = new List<string> {"01", "04", "09", "26", "27"};
var data = new List<Tuple<string, string>> {
new Tuple<string, string>("01", "05"),
new Tuple<string, string>("01", "02"),
new Tuple<string, string>("09", "04"),
new Tuple<string, string>("01", "09"),
new Tuple<string, string>("01", "45"),
new Tuple<string, string>("04", "06"),
new Tuple<string, string>("27", "12")
};
var results = data.Where(d => uniqueKeys.Contains(d.Item1) && uniqueKeys.Contains(d.Item2));
嘗試
var uniqueKeys = new List<string> {"01", "04", "09", "26", "27"};
List<Example> filtedvalues = Maindatas.FindAll(emp => uniqueKeys == emp.to && uniqueKeys == emp.from);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.