如何从List <keyvaluepair <string,string =“”>&gt;?</keyvaluepair <string,>获取一个元素的公共值的条目

时间:2014-02-21 16:52:57

标签: c# entity-framework dictionary

假设我有一个List<KeyValuePair<string, string>>对象,其中以下条目代表狗的名字以及他们出生的不同品种标记:

Name                BreedMarkers

Spot                PUG
Spot                PITBULL
Spot                BASSETT
Rover               DACHSHUND
Meat                PUG
Meat                ROTTWEILER

我想只抓取共享公共BreedMarkers的字符串对。例如,由于SpotMeat共有PUG的标记,我想削减字典,以便删除除这些对之外的任何内容。最终结果应该是:

Name (Key)          BreedMarkers (Value)

Spot                PUG
Meat                PUG

到目前为止,我已经尝试将元素输出到单独的List<string>个对象,然后在它们之间尝试join,但这是code smelly,我希望有更优雅的方式。

1 个答案:

答案 0 :(得分:2)

ToLookup会创建一个新的ILookup(类似于IDictionary,但每个键有多个值),其中值变为键,反之亦然:

myNewDict = myOldList.ToLookup(x => x.Value, x => x.Key);
var results = myNewDict["PUG"]; // Spot, Meat

或者只是:

var results = myOldList.Where(x => x.Value == "PUG").Select(x => x.Key);

如果您计划对多个值进行查找,ToLookup会更好;否则,Where是好的。