2010-06-16 83 views
2

我們正試圖在我們的系統的所有區域編寫強類型代碼,因此我們不想設置var sortColumn = "FirstName",我們想要說sortOption = (p => p.FirstName)。如果sortOption的類型爲Expression<Func<Person, object>>(我們實際在代碼中使用泛型,但無關緊要),這很有用。然而,我們遇到了多對多關係的問題,因爲這種表示法失效了。是否存在處理多對多關係的MemberExpression這樣的事情?

考慮這個簡單的代碼:

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。我們已經對代碼進行了重大更新,但是這應該給你關於這個問題背後的上下文的一般詳細的想法。

回答

0

在一個區域,我們發現以下語法的作品,雖然這是不理想的:

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

這在我們使用實體框架,並試圖有一個強類型的作品。使用Include()方法關閉Context的實體集合。然而,有些地方這不適合我們,所以我們希望有更好的解決方案。否則,我懷疑我們可以解決這些問題,並跳過其他領域的一些環節來完成這項工作。

+0

這是一個非理想的解決方案,但我們現在正在做的。儘管看起來不太合適,但似乎工作得很好。 – Jaxidian 2010-06-22 18:40:24

相關問題