使用linq查询集合时,它总是返回null
Collection<JCTransLabour> oJCTransLabours = null;
oJCTransLabour = HttpContext.Current.Session["CurrentLabourTransactions"] as
Collection<JCTransLabour>;
// at this point the collection oJCTransLabours contains 3500 records
var oCurrentLabourTrans = from clt in oJCTransLabours
where clt.TransactionDate.Date != DateTime.Now.Date
select clt;
// at this point the collection oJCTransLabour = null
// I have tried to search on different fields
return oCurrentLabourTrans;
我必须做错事。非常感谢任何帮助。
答案 0 :(得分:1)
我认为你只是混淆变量名称:
// You were missing an 's' before
oJCTransLabours = HttpContext.Current.Session["CurrentLabourTransactions"]
as Collection<JCTransLabour>;
答案 1 :(得分:1)
你的问题中至少有一个错字。
你在
oJCTransLabour = HttpContext.Current.Session["CurrentLabourTransactions"] as Collection<JCTransLabour>;
oJCTransLabour
不是空的,对吗?如果会话包含它,这是有意义的。
然后定义oCurrentLabourTrans
并为其分配LINQ查询。然后你说那个
// at this point the collection oJCTransLabour = null
等等,它怎么能为空?你甚至没有修改它(它被oCurrentLabourTrans
修改过)你只是说oJCTransLabour
不是空的!
更新:我刚刚注意到名称中也有类型:您将其称为oJCTransLabours
,然后将其称为oJCTransLabour
。请发布完全代码,这样我们就不会对您错误输入的内容做出假设。
当然,LINQ表达式不能为空。
我认为oJCTransLabours
很可能是空的,尽管你另有说明。
您认为这样的原因可能是因为您确定HttpContext.Current.Session["CurrentLabourTransactions"]
不为空。确实如此,但您使用as
运算符将值转换为Collection<JCTransLabour>
。与转换运算符相反,如果类型不匹配,as
不会抛出异常,它只返回null
。
您可能想尝试
oJCTransLabour = (Collection<JCTransLabour>)HttpContext.Current.Session["CurrentLabourTransactions"];
并查看是否出现任何错误。
答案 2 :(得分:0)
这看起来不像linq问题,而是会话中的值为null或不是Collection<JCTransLabour>
。
您可以通过将查找更改为:
来确保它不为nulloJCTransLabour = (HttpContext.Current.Session["CurrentLabourTransactions"] as Collection<JCTransLabour>) ?? new Collection<JCTransLabour>();
如果应该始终存在会话值,那么如果在执行查询之前未找到该值,则可以抛出异常。
答案 3 :(得分:0)
试试这个:
var oCurrentLabourTrans = (from clt in oJCTransLabours where clt.TransactionDate.Date != DateTime.Now.Date select clt).ToList();