动态LINQ选择方法“selector”参数

时间:2017-09-14 11:52:53

标签: c# linq dynamic

我正在努力使用Dynamic LINQ。 给定一个IQueryable List(var queryable MyList.AsQueryable),我的linq语句将是

        var queryable = plist.AsQueryable();
        query =  from People p in queryable
                    .Where<People>( "whereclause" )
                .Select( p );

编译器告诉“当前上下文中名称'p'不存在。”关于.Select(p)行。

如果我想获得完整的People实例,我该怎么办? 我知道Dynamic.cs的Select扩展方法

public static IQueryable Select(this IQueryable source, string selector, params object[] values)

期望“选择器”的字符串参数,但无法确定将其设置为简单地获取整个实例的内容。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

    var query = from People p in queryable
                    .Where<People>("whereclause")
                select p;

答案 1 :(得分:1)

问题是你混合使用LINQ表达式的两种方式,你必须使用Lambda表达式或SQL-Like表达式而不是两者的组合。

  1. Lambda Expression: var result = plist.AsQueryable().Where(x => true).ToList();
  2. 注意:.Where(x => true)应包含您的过滤逻辑,例如.Where(p => p.Age > 14 && p.Age < 21),您可以选择通过添加.ToList();将该对象列入列表,或选择要添加到您的属性中对象然后你将添加.Select(s=> s.Age).ToList();这个表达式将返回List,假设你在对象中有int Age属性,或者你可以通过从检索到的值转换到新对象或在新的匿名对象中接收数据来返回特定对象.Select(s=> new Person {Age = s.Age}).ToList();.Select(s=> new {newProp = s.Age}).ToList();

    1. SQL赞 var result = from object o in plist // query object where true // your condition select o; // selected values
    2. 希望这有帮助!