2016-03-01 66 views
1

希望我可以解釋得很好,以獲得答案。我期望做的,最好使用linq,是爲了識別字符串列表中的任何項目是否作爲另一個對象列表中的一個元素存在。這是一個非常通用的例子。如何確定列表中是否有任何項目作爲另一個對象列表的元素存在

列表1 { 「A」, 「B」, 「C」, 「d」}

例如1, 「A」 和表2列出2包含配對的物體, 「Z」 和3中,「F 」。

我想發現是,如果任何列表1中的字符串作爲列表2. AKA在列表2的第一個項目的第二個元素是真實存在的,因爲「A」也在列表1

有沒有辦法用linq來完成這件事?

+0

是的,這是可能的LINQ,但如果你想要一個確切的答案,然後讓我們知道是什麼類型的名單列表2的(或部分代碼的)。 – Ageonix

+2

這是可能的你有什麼實際嘗試過自己..? – MethodMan

+0

list 2是兩個元素都是字符串的對象列表 – Gazrok

回答

2

假設列表2是KeyValuePairs的集合,如字典或哈希表:

list2.Any(i=>list1.Contains(i.Value))

雖然,根據你的陳述「,在列表2中的第一項將是真實的,因爲‘A’也清單1.「這聽起來就像你想要一個List2的「副本」,每個List1都有一個布爾值。這將是:

list2.Select(i=>new {item=i, exists=list1.Contains(i.Value)});

+0

這在邏輯上對我有意義,但(i ._____)不會給我從列表中添加字符串元素的選項。 – Gazrok

+0

非常感謝你。這絕對是完美的。 – Gazrok

1

如果你想開始列表1:

bool result = list1.Any(elem => list2.Values.Contains(elem)); 
1

如果我明白你在找什麼,你可能需要一個GroupJoin,其確定的項目一個列表在第二個列表中有一個或多個匹配。

因此,對於您的特定問題:

var letters = new[] { "A", "B", "C", "D" }; 

var pairs = new[] 
{ 
    new { Id = 1, Letter = "A" }, 
    new { Id = 2, Letter = "Z" }, 
    new { Id = 3, Letter = "F" } 
}; 

var result = letters.GroupJoin(
    pairs, // join letters with pairs 
    x => x, // use the whole letter as the matching key 
    y => y.Letter, // use the Letter property as the matching key 
    (x, ys) => new { Letter = x, Exists = ys.Any() }); // yield true if there are any matches, otherwise false 
相關問題