小编Bak*_*kri的帖子

IEnumerable <dynamic> with linq

我正在尝试构建动态数据上下文,linq不支持动态类型我发现这个解决方案

http://jrwren.wrenfam.com/blog/2010/03/04/linq-abuse-with-the-c-4-dynamic-type/

public static class ObjectExtensionMethod
{
    public static IEnumerable<dynamic> Select(this object source, Func<dynamic, dynamic> map)
    {
        foreach (dynamic item in source as dynamic)
        {
            yield return map(item);
        }
    }

    public static IEnumerable<dynamic> Where(this object source, Func<dynamic, dynamic> predicate)
    {
        foreach (dynamic item in source as dynamic)
        {
            if (predicate(item))
                yield return item;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

此解决方案的问题是在应用where语句之后从数据库获取所有数据.有没有办法在从动态类型的数据库获取数据之前应用where语句

c# linq dynamic

9
推荐指数
1
解决办法
1642
查看次数

类型'System.Data.Linq.DataQuery`1 [System.Object]'上没有方法'Contains'

我正在尝试构建包含表达式.

private Expression<Func<T, bool>> Contains<T>(string property, IEnumerable<dynamic> values, T item)
{
    ParameterExpression pe = Expression.Parameter(item.GetType(), "c");
    Expression columnNameProperty = Expression.Property(pe, property);
    var someValueContain = Expression.Constant(values, values.GetType());
    var convertExpression = Expression.Convert(columnNameProperty, typeof(Guid));
    Expression expression = Expression.Call(someValueContain, "Contains", new Type[] { }, convertExpression);

    return Expression.Lambda<Func<T, bool>>(expression, pe);
}
Run Code Online (Sandbox Code Playgroud)

在运行时我得到了这个例外.

"类型'System.Data.Linq.DataQuery`1 [System.Object]'上没有方法'包含'."

灵魂是将值参数转换为列表

private Expression<Func<T, bool>> Contains<T>(string property, IEnumerable<dynamic> values, T item)
{
    ParameterExpression pe = Expression.Parameter(item.GetType(), "c");
    Expression columnNameProperty = Expression.Property(pe, property);
    Guidvalues = values.Cast<Guid>().ToList();
    var someValueContain = Expression.Constant(Guidvalues, Guidvalues.GetType());
    var convertExpression …
Run Code Online (Sandbox Code Playgroud)

c# linq dynamic

6
推荐指数
1
解决办法
1093
查看次数

标签 统计

c# ×2

dynamic ×2

linq ×2