Есть ли такая вещь, как MemberExpression, которая обрабатывает отношения многие ко многим? - PullRequest
2 голосов
/ 16 июня 2010

Мы пытаемся облегчить написание строго типизированного кода во всех областях нашей системы, поэтому вместо установки 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);.Действительно ли это возможно?

Если вам нужно больше информации, взгляните на мой старый вопрос .С тех пор мы значительно обновили код, но это должно дать вам общее подробное представление о контексте этого вопроса.

1 Ответ

0 голосов
/ 17 июня 2010

В одной области мы обнаружили, что работает следующий синтаксис, хотя он не идеален:

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

Это работает, когда мы используем Entity Framework и пытаемся использовать строго типизированный метод .Include () из коллекций сущностей нашего контекста. Тем не менее, есть области, где это не работает для нас, поэтому мы надеемся, что есть лучшее решение. В противном случае, я подозреваю, что мы можем обойти проблемы и перепрыгнуть через некоторые обручи в других областях, чтобы сделать эту работу.

...