2010-06-16 1 views
2

Nous essayons de faciliter l'écriture de code fortement typé dans toutes les zones de notre système, donc plutôt que de définir var sortColumn = "FirstName", nous aimerions dire sortOption = (p => p.FirstName). Cela fonctionne très bien si le sortOption est de type Expression<Func<Person, object>> (nous utilisons des génériques dans notre code mais cela n'a pas d'importance). Cependant, nous rencontrons des problèmes pour les relations plusieurs-à-plusieurs parce que cette notation tombe en panne.Existe-t-il une MemberExpression qui gère une relation many-to-many?

Tenir compte de ce code simple:

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; } 
    } 

Est-il possible d'avoir ce genre de MemberExpression pour identifier la colonne StateID hors d'une entreprise? Encore une fois, le but de l'utilisation de ceci n'est pas de renvoyer un objet StateID, c'est simplement d'identifier cette propriété hors de cette entité (pour le tri, le filtrage et d'autres buts).

Il me semble qu'il devrait y avoir un moyen de le faire, même si ce n'est pas aussi joli que foo = business.Addresses.SomeExtension(a => a.State.StateID);. Est-ce vraiment possible?

Si plus de fond est nécessaire, jetez un oeil à this old question of mine. Nous avons depuis mis à jour le code de manière significative, mais cela devrait vous donner l'idée générale détaillée du contexte derrière cette question.

Répondre

0

Dans une région, nous avons constaté que la syntaxe suivante fonctionne, bien qu'il soit non-idéal:

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

Cela fonctionne quand nous utilisons Entity Framework et tentent d'avoir un fortement typé. Méthode Include() hors des collections d'entités de notre contexte. Cependant, il y a des domaines où cela ne fonctionne pas pour nous, alors nous espérons qu'il existe une meilleure solution. Sinon, je soupçonne que nous pouvons contourner les problèmes et sauter des obstacles dans les autres domaines pour que cela fonctionne.

+0

Ceci est une solution non idéale, mais c'est ce que nous faisons pour l'instant. Semble fonctionner plutôt bien même si cela ne semble pas tout à fait raison. – Jaxidian

Questions connexes