繁体   English   中英

LINQ查询仅在添加where子句后返回空引用

[英]LINQ query returns null reference only after adding where clause

我在一个方法中有2个链接的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为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) ...尝试from gs in _repo.GetSample().Where(s=>s.quantity>0) ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM