public void TupleKeyInfoHelper_ParseLarge()
        {
            TupleKeyInfoHelper builder = new TupleKeyInfoHelper(typeof(Tuple <int, string, int, string, int, string, int, Tuple <string, int> >));

            Expression <Func <Group, Tuple <int, string, int, string, int, string, int, Tuple <string, int> > > >
            selector = (Group m) =>
                       new Tuple <int, string, int, string, int, string, int, Tuple <string, int> >(
                m.Id,
                m.Name,
                m.Id,
                m.Name,
                m.Id,
                m.Name,
                m.Id,
                new Tuple <string, int>(
                    m.Name,
                    m.Id));

            MemberInfo[] members = null;
            bool         res     = builder.TryParseKeySelectorExpression(selector.Body, true, out members);

            Assert.AreEqual(true, res);
            Assert.IsNotNull(members);
            Assert.AreEqual(9, members.Length);

            for (int i = 0; i < 9; i++)
            {
                string expect = i % 2 == 0 ? "Id" : "Name";
                Assert.AreEqual(expect, members[i].Name);
            }
        }
        public void TupleKeyInfoHelper_ParseCreate()
        {
            TupleKeyInfoHelper builder = new TupleKeyInfoHelper(typeof(Tuple <int, string>));

            Expression <Func <Group, Tuple <int, string> > > selector =
                (Group m) => Tuple.Create(m.Id, m.Name);

            MemberInfo[] members = null;
            bool         res     = builder.TryParseKeySelectorExpression(selector.Body, true, out members);

            Assert.AreEqual(true, res);
            Assert.IsNotNull(members);
            Assert.AreEqual(2, members.Length);
            Assert.AreEqual("Id", members[0].Name);
            Assert.AreEqual("Name", members[1].Name);
        }