LINQ查询仅在添加where子句后返回null引用
本文关键字:返回 null 引用 子句 where 查询 添加 LINQ | 更新日期: 2023-09-27 17:59:41
我在一个方法中有两个链接的LINQ查询。第一个从表格行中提取一个子字符串,其形式为"人员XXXX-XXXX标记为已删除",提取XXXX-XXXX部分,并将其放入包含XXXX-XXXX的对象中。
var ids = from m in _repo.GetMessages()
where m.tool == 7
select new IDs
{
ID = m.text.Substring(6, 11),
text = m.text
};
这将按预期返回数据。然后,id连接到随后的"结果"查询:
var results = from gs in _repo.GetSample()
join c in _repo.Getcenters() on gs.Iid equals c.Iid_c
join id in ids on gs.id equals id.ID
select new Results
{
c_id = c.id,
iid_d = gs.Iid_d,
Id = gs.id,
Num = gs.num,
sts_dt = c.sts_dt,
store_dte = gs.Store_dte,
quantity = gs.Quantity
};
此表单中的查询返回所需的数据,不过我需要在结果查询中添加where子句。当我添加一个引用查询中任何数据对象的where子句时,输出会产生"对象引用未设置为对象实例"。如果没有where子句,一切看起来都很好。
我的第一个想法是第一个数据集中存在null项,所以我添加了一个!=无效条款,无效。然后,我尝试用Contains(ID)语句替换带有ID的联接,但这并没有改变。由于我以前写过许多链接的LINQ查询,并以这种方式将它们链接起来,所以我的猜测是ID对象上的联接可能会导致一些奇怪的事情。有人知道如何在不产生错误的情况下添加where子句吗?非常感谢。
在处理了一段时间之后,我决定尝试将这两个查询连接在一起,这似乎解决了问题。为什么我一开始没有这样做,我不确定,但我猜连接到上一个查询的输出会触发一个空对象警告。以下查询工作正常:
var results = from gs in _repo.GetSample()
join c in _repo.Getcenters() on gs.Iid equals c.Iid_c
join ids in _repo.GetLogs() on gs.id equals ids.text.Substring(6,11)
where gs.quantity > 0
select new Results
{
c_id = c.id,
iid_d = gs.Iid_d,
Id = gs.id,
Num = gs.num,
sts_dt = c.sts_dt,
store_dte = gs.Store_dte,
quantity = gs.Quantity
};
它也是一个更好、更紧凑的查询。谢谢大家!
尝试from gs in _repo.GetSample().Where(s=>s.quantity>0)
...