【问题标题】:Dynamic LINQ Query not working properly with Taxonomy field动态 LINQ 查询无法与分类字段一起正常工作
【发布时间】:2013-11-07 23:00:45
【问题描述】:

我正在使用动态 Linq 查询。我将查询条件作为字符串动态生成并传递给查询。下面是我正在使用的代码。

 var q = dc.ListDirectory.AsQueryable().Where(condition).OrderBy("Title");
 foreach (var p in q)
 {
   Console.WriteLine(p.Title);`enter code here`
 }

上述查询工作正常(与其他字符串字段,即使有大量数据)除了分类字段。由于我无法直接对分类字段进行比较,所以我只拿了它的字符串部分进行比较。分类领域的条件就像

Type.Label = "文本"

使用分类字段条件进行查询: 只有10没有。列表中的项目它工作正常。

但是当没有时它会失败。列表中的项目大约是 419。

我发现它甚至在获取 var q 的值之前就开始执行 foreach 循环并给出未设置的对象引用...错误。

有什么线索吗?

【问题讨论】:

  • 那么你从哪里得到NullReferenceException?在 LINQ 语句上?还是在 foreach 循环中?
  • 在 foreach 循环中并且仅使用分类字段条件(当它必须与 419 个列表项一起使用时)。
  • 一些不清楚的地方:[1]Type.Label = "Text" 不是比较,而是赋值,错字? [2] Where() 采用某种Func ... [1] 中提到的代码块不是其中之一,那么您实际上传递的是什么? [3] 如果你在foreach 循环中的代码实际上是你程序中的代码,并且你得到一个NullReferenceException,那么实际上只有一件事可以为空,p,所以不知何故你就是 LINQ语句返回空项,但如果不知道您在查询什么,就很难为您提供任何帮助。如果您提供更多详细信息,请自行编辑问题。
  • 我已经深入研究了这个问题,并且我正在使用静态查询而不是动态查询。 var q = from c in dc.ListDirectory where (c.[TaxnonomyColumnName].Label.Equals("Text")) select c.Title; foreach (var p in q) { Console.WriteLine(p);我测试了不同的“文本”值。对于某些人来说,它给出了 183 个中的 15 个 Title 值,然后是 NullRefrenceException。对于某些人来说,它没有给出任何标题。对于某些人来说,它给出了 2 和错误。相同的查询在 U2U 中运行良好。

标签: c# linq


【解决方案1】:

您正在寻找 c.TaxnonomyColumnName].Label.Equals("Text") ... 但这并不能保证 c.Title 不会为空(我不确定在这种情况下 c 是什么,所以我无法为您提供帮助为什么它会为空)。

如果你不想得到空引用异常,那么我可以添加一个额外的 where 子句来过滤掉它们。

var q = from c in dc.ListDirectory
        where (c.[TaxnonomyColumnName].Label.Equals("Text") && c.Title != null)
        select c.Title;

foreach (var p in q) { Console.WriteLine(p); } 

【讨论】:

    猜你喜欢
    • 2014-02-01
    • 1970-01-01
    • 2019-09-25
    • 2013-07-12
    • 2022-11-15
    • 2014-03-22
    • 1970-01-01
    • 2012-03-16
    • 2020-09-27
    相关资源
    最近更新 更多