4

次のクエリがあります。

   dat =
from s in dat
orderby s.Schedule.Employee.EmployeName ascending
select s;

問題はSchedule、またはそのEmployee可能性がありますnull。その場合、最初または最後に表示する必要があります。気にしません。

これを行う方法はありますか?現在、 の場合にクラッシュしますnull

グリッド ビューを並べ替えるために使用します。

[NullReferenceException: Object reference not set to an instance of an object.]
   KezberProjectManager.Cases.<gvCases_Sorting>b__8(Case s) in C:\Users\jlarouche\documents\visual studio 2010\Projects\KezberProjectManager\KezberProjectManager\Cases.aspx.cs:103
   System.Linq.EnumerableSorter`2.ComputeKeys(TElement[] elements, Int32 count) +88
   System.Linq.EnumerableSorter`1.Sort(TElement[] elements, Int32 count) +21
   System.Linq.<GetEnumerator>d__0.MoveNext() +178
   System.Web.UI.WebControls.GridView.CreateChildControls(IEnumerable dataSource, Boolean dataBinding) +1698
   System.Web.UI.WebControls.CompositeDataBoundControl.PerformDataBinding(IEnumerable data) +67
   System.Web.UI.WebControls.GridView.PerformDataBinding(IEnumerable data) +14
   System.Web.UI.WebControls.DataBoundControl.OnDataSourceViewSelectCallback(IEnumerable data) +123
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +33
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +138
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30
   System.Web.UI.WebControls.GridView.DataBind() +4
   KezberProjectManager.Cases.gvCases_Sorting(Object sender, GridViewSortEventArgs e) in C:\Users\jlarouche\documents\visual studio 2010\Projects\KezberProjectManager\KezberProjectManager\Cases.aspx.cs:138
   System.Web.UI.WebControls.GridView.OnSorting(GridViewSortEventArgs e) +122
   System.Web.UI.WebControls.GridView.HandleSort(String sortExpression, SortDirection sortDirection) +65
   System.Web.UI.WebControls.GridView.HandleSort(String sortExpression) +78
   System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e, Boolean causesValidation, String validationGroup) +497
   System.Web.UI.WebControls.GridView.RaisePostBackEvent(String eventArgument) +205
   System.Web.UI.WebControls.GridView.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +9642898
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724
4

4 に答える 4

4

nullプロパティにアクセスする前に確認する必要があります。

var x = from s in dat
        let s = s.Schedule
        let e = s == null ? null : s.Employee
        orderby e == null ? null : e.EmployeeName ascending
        select s;
于 2013-02-13T21:22:08.540 に答える
0

このようなもの?

dat =
    from s in dat
    orderby 
       s.Schedule == null ? "" : 
       s.Schedule.Employee == null ? "" : 
       s.Schedule.Employee.EmployeName ascending
    select s;
于 2013-02-13T21:22:38.033 に答える
0

では、if 条件を使用してこれらのオブジェクトの null をチェックし、そこで処理しないのはなぜでしょうか? ここでの大きな問題は、null にする必要があるかどうかです。もしそうなら、このコードがアプリケーションでそれ以上実行されないようにする必要があるようです。

于 2013-02-13T21:23:15.443 に答える
-1

この状況に対処するためのFirstOrDefault()LastOrDefault()およびDefaultIfEmpty()メソッドがあります。

于 2013-02-13T21:21:07.977 に答える