c# – 具有多个键的ToLookup

有没有办法为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)];

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...