linq - 在动态 Linq 中使用 "Single"

标签 linq

我正在尝试将我在 Linq 中工作的 Linq 查询转换为能够在动态 linq 中工作(使用 System.Linq.Dynamic),因为我希望用户能够形成他们自己的查询,并且将添加此查询字符串在运行时到其他查询字符串。

我有一个疑问:

db.incidents.Where(a => a.incidentLocations.Single().location.street.Contains(location);

我尝试将其转换为以下动态 linq 字符串:
query = 
string.Concat("incidentLocations.Single().location.street.Contains(\"", location, "\")");

db.incidents.Where(query);

其中 location 是一个包含搜索文本的字符串。

我已设法将所有其他查询转换为动态 linq,但我正在努力解决异常错误:

“不存在适用的聚合方法‘单一’”

我知道动态 linq 不支持所有扩展方法,有人可以告诉我如何解决这个问题。

最佳答案

获取 Linq.Dynamic 的源代码,复制粘贴 Where 方法,更改方法中的签名和带有函数名称的字符串,您就可以开始了。我这样做是为了添加 Single First 等,我不能在这里复制它,因为我不在我的开发机器上,但如果有必要,我会稍后再做;)

编辑:如果您决定使用它,这里是 Single 方法:

public static object Single(this IQueryable source)
    {
        if (source == null) throw new ArgumentNullException("source");
        return source.Provider.Execute(
            Expression.Call(
                typeof(Queryable), "Single",
                new Type[] { source.ElementType },
                source.Expression));
    }

关于linq - 在动态 Linq 中使用 "Single",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4849973/

相关文章:

C# IEnumerable.Count() 抛出 IndexOutOfRangeException

c# - 对于多个属性(键)和作为值的列表来说,最合适的数据类型是什么?

c# - 使用linq查找第二个最高薪水

c# - 界面中的通用列表

linq - 如何调用动态指定不同表名的 Linq-to-Entities (EF4) 查询?

c# - LINQ:从集合中取出一系列元素

c# - 使用 linq 查找 List<List<string>> 的多个值中的任何一个

c# - 使用 linq 时摆脱嵌套的 foreach 循环

c# - 在 linq 中使用 GroupBy 对字符串的字母进行分组

c# - 针对 Entity Framework 的 LINQ 查询如何将日期传递给 SQL Server?