我們正試圖在我們的系統的所有區域編寫強類型代碼,因此我們不想設置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。我們已經對代碼進行了重大更新,但是這應該給你關於這個問題背後的上下文的一般詳細的想法。
這是一個非理想的解決方案,但我們現在正在做的。儘管看起來不太合適,但似乎工作得很好。 – Jaxidian 2010-06-22 18:40:24