2010-10-04 52 views
0

我在前一天张贴了一些代码的一部分,但这样做导致了更多的混淆。这是我的代码。当使用linq查询一个集合时,它总是返回一个空值

if (HttpContext.Current.Session != null) 
{ 
       if (HttpContext.Current.Session[ "CurrentLabourTransactions" ] != null) 
       { 
        Collection<JCTransLabour> oJCTransLabours = null; 

        oJCTransLabours = (Collection<JCTransLabour>)HttpContext.Current.Session["CurrentLabourTransactions"]; 

        if (Settings.ShowTodaysTransactionInApproval) 
         if (oJCTransLabours != null) return oJCTransLabours; 


        if (oJCTransLabours != null) 
        { 
//oJCtransLabour contains alot of record 
         var oCurrentLabourTrans = (from clt in oJCTransLabours 
                where clt.TransactionDate.Date != DateTime.UtcNow 
                select clt); 
//oCurrentLabourTrans is null. 
         return oCurrentLabourTrans as Collection<JCTransLabour>; 
        } 
       } 
      } 
      return null; 

当进入最终的if语句时,会有许多具有不同日期的事务。它似乎尽管它总是返回空记录。

在此先感谢您的帮助。

+0

你的意思是,它总是返回* NULL *,或者它总是返回空行的集合? – 2010-10-04 16:02:19

+1

是'oCurrentLabourTrans'null还是'oCurrentLabourTrans作为集合'null? – 2010-10-04 16:02:59

+0

[使用linq查询集合时总是返回null]的可能重复(http://stackoverflow.com/questions/3831490/when-querying-a-collection-using-linq-it-always-returns-a- null) – Guffa 2010-10-04 16:03:51

回答

4

这条线是罪魁祸首:

return oCurrentLabourTrans as Collection<JCTransLabour>; 

oCurrentLabourTrans一个Collection<JCTransLabour>,因此as操作返回null,如所预期。如果你想这样做,而不是:

return (Collection<JBTransLabour) oCurrentLabourTrans; 

演员将失败,将会抛出InvalidCastException。 LINQ操作员直接生成实现IEnumerable<>的对象;他们不会自动创建收集和列表对象。

如果你非要返回Collection<>,你可以这样做,而不是:

return new Collection<JCTransLabour>(oCurrentLabourTrans.ToList()); 
+0

在附注上,如果你这么做了很多,你可以创建一个自定义的扩展,转换成一个Collection <> – 2010-10-04 17:06:09

相关问题