繁体   English   中英

条款引发异常的Linq to Collection

[英]Linq to Collection Where Clause Throws Exception

我有一个遍历IEnumerable的foreach循环。 在循环内部,将根据随循环的每次迭代而变化的参数构建字符串。 然后,该字符串用于使用动态linq查询。 然后,我想将结果应用于构建自定义对象的列表。 where子句是第一次执行,然后退出循环。 为什么这样做呢? 我无法确认查询是否成功执行,但是没有引发异常。

         public List<groupingModel> getGrouping(string groupBy)
    {
        List<groupingModel> lgm = new List<groupingModel>();


        var w2 = getWVWellsList();

        var v = w2.Select(groupBy).Distinct();

        foreach(string val in v)
        {

            string whereClause = string.Format("{0} = {1}", groupBy, val);

            IEnumerable<WVWellModel> q2 = w2.Where(whereClause);
            List<WVWellModel> l = q2.ToList<WVWellModel>();

            lgm.Add(new groupingModel { Header = val, Wells = l });
        }

        return lgm;
    }

编辑-捕获的异常

我将代码放入try / catch,并发现了一个我怀疑由于动态linq的性质而未被捕获的异常。 在列出异常之前,我想举一个例子。

用户选择按状态分组。 这将触发一个方法,该方法然后运行查询,但首先基于所选属性的不同值构建一个where子句。 这是通过var v = w2.Select(groupBy).Distinct();

在此示例中,第一个通过循环的值是科罗拉多。 然后使用字符串whereClause = string.Format("{0} = {1}", groupBy, val);构建Where子句whereClause = string.Format("{0} = {1}", groupBy, val); 在这种情况下, groupBy = state和val = colorado ..我可以通过放置断点来确认该字符串已成功构建,并且看起来像state = colorado (我也尝试使用“ ==”而不是“ =”)。

当执行查询时,我发现一个错误,指出“ WVWellModel中没有属性或字段“ Colorado”存在”,这实际上是正确的。 我要查询的属性是“州”而不是“科罗拉多州”。 好像我的Dynamic WhereClause反转了一样。

我已将此博客用作Dynamic Linq的参考。

https://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library

您需要将'colorado'值放入转义的引号中,如下所示:

string whereClause = string.Format("{0} = \"{1}\"", groupBy, val);  

它不会在您链接的指南中显示,因为他正在搜索的值是整数,并且-与SQL代码中的代码非常相似-您不需要在整数周围加上撇号(')。 不过,您在搜索文本时会这样做。

暂无
暂无

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

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