有没有办法为LINQ提供的.ToLookup函数要求多个键?
我会承认,这似乎是非直观的,我希望没有实际的方法来做到这一点,但我希望有人知道一个方法.
我基本上希望能够通过两个值进行查找,例如一个字符串和一个int,并用这两个值来检索对象.
例
public class MyClass { public string StringProp {get;set;} public int IntProp {get;set;} public object MoreData {get;set;} } public class Main { public void Main() { HashSet<MyClass> set = new HashSet<MyClass>(); set.Add(new MyClass {StringProp = "a",IntProp = 1,MoreData = null}); set.Add(new MyClass {StringProp = "c",IntProp = 4,MoreData = new object()}); set.Add(new MyClass {StringProp = "a",IntProp = 2,MoreData = "upupdowndown"}); set.Add(new MyClass {StringProp = "c",MoreData = string.Empty}); set.Add(new MyClass {StringProp = "c",MoreData = string.Empty}); // Using 'var' because I don't know how this would be defined. // I recognize that this will not compile - but this is what I'm trying to do. var lookup = set.ToLookup(x => x.StringProp && x.IntProp) MyClass c = lookup["a",1].First(); // Should return the first element IEnumerable<MyClass> list = lookup["c",4]; // Should return the 2nd and last elements } }
解决方法
我会使用元组这种事情:
var lookup = set.ToLookup(x => Tuple.Create(x.StringProp,x.IntProp)); MyClass c = lookup[Tuple.Create("a",1)].First(); IEnumerable<MyClass> list = lookup[Tuple.Create("c",4)];