当使用linq查询一个集合时,它总是返回一个空值
问题描述:
我在前一天张贴了一些代码的一部分,但这样做导致了更多的混淆。这是我的代码。当使用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语句时,会有许多具有不同日期的事务。它似乎尽管它总是返回空记录。
在此先感谢您的帮助。
答
这条线是罪魁祸首:
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
你的意思是,它总是返回* NULL *,或者它总是返回空行的集合? – 2010-10-04 16:02:19
是'oCurrentLabourTrans'null还是'oCurrentLabourTrans作为集合'null? –
2010-10-04 16:02:59
[使用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