使用linq查询集合时,它始终返回null

时间:2010-10-04 16:00:11

标签: c# linq object

我前几天发布了部分代码,但这样做引起了更多的困惑。这是我的代码。

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语句时,有很多具有不同日期的交易。它似乎总是返回空记录。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

这条线是罪魁祸首:

return oCurrentLabourTrans as Collection<JCTransLabour>;

oCurrentLabourTrans a Collection<JCTransLabour>,因此as操作会按预期返回null。如果你这样做:

return (Collection<JBTransLabour) oCurrentLabourTrans;

演员表会失败并且会抛出InvalidCastException。 LINQ运算符生成直接实现IEnumerable<>的对象;它们不会自动创建集合和列表对象。

如果您必须返回Collection<>,则可以改为:

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