0

次の左外部結合 LINQ Query からオブジェクト参照の問題が発生しています。

result.Data = from c in resourceActions.Actions
                      join o in roleResourceActions.Actions on c.ActionID equals o.ActionID into g
                      from a in g.DefaultIfEmpty()
                 select new
                 {
                     ActionID=c.ActionID,
                     ActionName=c.ActionName
                     ,IsSelected = a.ActionName==null?false:true
                 };

上記のLINQクエリをトレースしたところ、オブジェクト「a」自体がnullのようです。しかし、このオブジェクトに基づいてのみ、「IsSelected」の値を取得できます

4

3 に答える 3

2

一部のクエリで null になることが予想される場合はa、 read の前にテストできますActionName

result.Data = from c in resourceActions.Actions
                  join o in roleResourceActions.Actions on c.ActionID equals o.ActionID into g
              from a in g.DefaultIfEmpty()
              select new
              {
                  ActionID=c.ActionID,
                  ActionName=c.ActionName,
                  IsSelected = a != null && a.ActionName != null
              };
于 2012-08-10T14:50:07.043 に答える
1
result.Data = from c in resourceActions.Actions
                      join o in roleResourceActions.Actions on c.ActionID equals o.ActionID into g
                      from a in g.DefaultIfEmpty()
                 select new
                 {
                     ActionID=c.ActionID,
                     ActionName=c.ActionName
                     ,IsSelected = a != null && a.ActionName==null ? false : true
                 };
于 2012-08-10T14:48:27.083 に答える
0

を呼び出しています。これは、呼び出したクエリのタイプの値を DefaultIfEmpty返します。default

クエリの型は参照型であるため、 をDefaultIfEmpty返しますnull

したがって、解決策は、要素を生成するかどうかにかかわらず、クエリで要素を返すかどうかによって異なりますjoin

そうでない場合は、削除してください:

result.Data = from c in resourceActions.Actions
              join o in roleResourceActions.Actions on c.ActionID equals o.ActionID into g
              from a in g
              select new
              {
                 ActionID=c.ActionID,
                 ActionName=c.ActionName,
                 IsSelected = a.ActionName==null?false:true
              };
于 2012-08-10T14:54:15.627 に答える