我正在使用Microsoft的動態Linq庫/示例對列表進行排序。因此,例如,我有以下的C#代碼:動態LINQ表達式中的空引用異常
myGrid.DataSource=repository.GetWidgetList()
.OrderBy(sortField + " " + sortDirection).ToList();
我必須在我的畫線處於0的情況下:與另一個對象,這有可能會顯示在網格屬性1的關係。當我們嘗試並對此進行排序時,只要我的所有小工具都有這個孩子,就可以正常工作。例如,我們以Child.Name
訂購。但是,當Child爲空時,我們會得到空引用異常。
我在這裏有一些選擇,我知道我可以選擇到一個匿名類型並綁定到,我也可以在父對象上公開Child.Name並通過代碼處理這個(我不喜歡包含我的對象模型)。
在理想的世界中,我想更新庫來處理這種情況。在深入研究之前,我想知道是否有人遇到過這個問題,並且已經有解決方案了?
編輯
貌似我沒有解釋不夠好。我正在使用C# samples附帶的Dynamic Linq Library。這個庫補充說,讓你用一個lambda表達式的字符串就地所以我的代碼實際上是這樣的一些不錯的擴展:
private void BindGrid(sortField,sortDirection)
{
this.grid.DataSource=....OrderBy("MyField ASC")....
}
當然串有被替換的參數。但是這允許我們在用戶點擊網格標題時動態改變排序。我們不必如果其他邏輯來處理所有的排列。
我的解決辦法,因爲我記錄的波紋管改變了我很好的清潔方法爲:
private void BindGrid()
{
var sortField=this._sortField;
if (sortField=="Child.Name")
{
sortField="iif(Child==null,null,Child.Name)";
}
this.grid.DataSource=repository.GetWidgetList()
.OrderBy(sortField + " " + this._sortDirection)
.ToList();
}
雖然這個工程,這意味着現在我必須爲我們增加我們要公開新的字段或屬性更新此代碼在子對象上的網格中。
不,這不是我所指的。動態linq是C#示例代碼的一部分,可讓您將字符串用作OrderBy。它在運行時將字符串編譯爲lambda表達式。 – JoshBerke
爲什麼這個答案被接受爲實際答案?我處於同樣的情況。 – Mike