c# - 是否存在处理多对多关系的 MemberExpression 之类的东西?

标签 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 .我们已经对代码进行了重大更新,但这应该能让您大致了解这个问题背后的背景。

最佳答案

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

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

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

关于c# - 是否存在处理多对多关系的 MemberExpression 之类的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054096/

相关文章:

c# - 我的手机有前置摄像头和/或麦克风吗?

c# - 我可以将 C# 变量管理到 .js 中吗?

java - 比较器 .comparing().reversed() 奇怪的行为/没有按预期工作

node.js - 在 lambdas/arrow-functions 中抛出没有大括号的错误

c# - 如何将 "Assert.That()"列表中的项目与 NUnit 匹配某些条件?

c# - 世界点到等距点 - 需要帮助理解

.net - .NET 4 是否更改了证书请求框架在 TLS 中的应答方式

c# - 计算托管堆大小及其中的所有对象

c# - WPF 窗口没有获得焦点

node.js - HTTP Post 请求未在 AWS Lambda 中通过