0

我从以下左外连接 LINQ 查询中得到一个对象引用问题:

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”本身为空。但仅基于此对象,我可以获得“IsSelected”的值

4

3 回答 3

2

如果您希望a在某些查询中为 null,则可以在 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 回答