2012-08-10 61 views
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”

回答

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 
       }; 
2

如果你希望a是在某些查询无效,你可以测试之前阅读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 
       }; 
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 
       };