是否存在处理多对多关系的MemberExpression?

时间:2010-06-16 14:19:59

标签: c# .net-4.0 lambda

我们正努力让在系统的所有区域编写强类型代码变得容易,因此我们不想设置var sortColumn = "FirstName"我想说sortOption = (p => p.FirstName)。如果sortOption的类型为Expression<Func<Person, object>>(我们在代码中实际使用泛型但无关紧要),这很有用。但是,我们遇到多对多关系的问题,因为这种符号会崩溃。

考虑这个简单的代码:

    internal class Business
    {
        public IQueryable<Address> Addresses { get; set; }
        public string Name { get; set; }
    }

    internal class Address
    {
        public State MyState { get; set; }
    }

    internal class State
    {
        public string Abbreviation { get; set; }
        public int StateID { get; set; }
    }

是否可以使用此类MemberExpression来识别业务中的StateID列?同样,使用它的目的不是返回一个StateID对象,而只是从该实体中识别该属性(用于排序,过滤和其他目的)。

我觉得应该有一些方法可以做到这一点,即使它不像foo = business.Addresses.SomeExtension(a => a.State.StateID);那么漂亮。这真的有可能吗?

如果需要更多背景,请查看this old question of mine。我们已经对代码进行了重大更新,但这应该为您提供有关此问题背后的背景的一般详细信息。

1 个答案:

答案 0 :(得分:0)

在一个领域,我们发现以下语法有效,尽管它不理想:

business.Addresses.First().State.StateID;

当我们使用Entity Framework并尝试从Context的实体集合中使用强类型.Include()方法时,这是有效的。但是,有些领域对我们不起作用,所以我们希望有更好的解决方案。否则,我怀疑我们可以解决这些问题并跳过其他领域的一些环节来完成这项工作。