Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “动态LINQ选择方法”;选择器";论点_C#_Linq_Dynamic - Fatal编程技术网

C# “动态LINQ选择方法”;选择器";论点

C# “动态LINQ选择方法”;选择器";论点,c#,linq,dynamic,C#,Linq,Dynamic,我正在与动态LINQ作斗争。 给定一个IQueryable列表(var queryable MyList.AsQueryable),我的linq语句 var queryable = plist.AsQueryable(); query = from People p in queryable .Where<People>( "whereclause" ) .Select( p )

我正在与动态LINQ作斗争。 给定一个IQueryable列表(var queryable MyList.AsQueryable),我的linq语句

        var queryable = plist.AsQueryable();
        query =  from People p in queryable
                    .Where<People>( "whereclause" )
                .Select( p );
需要“选择器”的字符串参数,但无法确定如何将其设置为仅获取整个实例

任何帮助都将不胜感激

var query=来自查询中的人员p
    var query = from People p in queryable
                    .Where<People>("whereclause")
                select p;
.其中(“Where条款”) 选择p;
var query=来自查询表中的人员p
.其中(“Where条款”)
选择p;

问题在于,您混合了使用LINQ表达式的两种方法,必须使用Lambda表达式或类似SQL的表达式,而不是两者的组合

  • Lambda表达式:
    
    var result=plist.AsQueryable().Where(x=>true.ToList()
  • 注意:
    .Where(x=>true)
    应该包含过滤逻辑,例如
    。Where(p=>p.Age>14&&p.Age<21)
    那么您有两种选择,一种是通过添加
    .ToList()将该对象框入列表
    或选择要添加到对象中的属性,然后添加
    。选择(s=>s.Age).ToList()此表达式将返回列表,前提是您的对象中有一个int-Age属性,或者您可以通过将检索到的值强制转换到新对象中来返回特定对象,或者在新匿名对象中接收数据new{newProp=s.Age}).ToList()

  • 类似SQL的
    
    var result=来自plist//查询对象中的对象o
    你的情况如何
    选择o;//选定值
    

  • 希望这有帮助

    问题在于,您正在混合使用LINQ表达式的两种方法,必须使用Lambda表达式或类似SQL的表达式,而不是两者的组合

  • Lambda表达式:
    
    var result=plist.AsQueryable().Where(x=>true.ToList()
  • 注意:
    .Where(x=>true)
    应该包含过滤逻辑,例如
    。Where(p=>p.Age>14&&p.Age<21)
    那么您有两种选择,一种是通过添加
    .ToList()将该对象框入列表
    或选择要添加到对象中的属性,然后添加
    。选择(s=>s.Age).ToList()此表达式将返回列表,前提是您的对象中有一个int-Age属性,或者您可以通过将检索到的值强制转换到新对象中来返回特定对象,或者在新匿名对象中接收数据new{newProp=s.Age}).ToList()

  • 类似SQL的
    
    var result=来自plist//查询对象中的对象o
    你的情况如何
    选择o;//选定值
    

  • 希望这有帮助

    正确的形式是
    。选择(p=>p)
    ,但它是多余的,因为@mjwills saidI之前实际上是错误的-它应该改为
    选择p
    。我已经编辑了这个问题(更改了缩进),以便更清楚地说明原因。正确的形式是
    。选择(p=>p)
    ,但它是多余的,因为@mjwills saidI之前实际上是错误的-它应该改为
    选择p
    。我对问题进行了编辑(更改了缩进),以便更清楚地说明原因。
        var query = from People p in queryable
                        .Where<People>("whereclause")
                    select p;