Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# 使用反射在DbContext上编写等效LINQ查询缺少where条件_C#_.net_Entity Framework_Linq_System.reflection - Fatal编程技术网

C# 使用反射在DbContext上编写等效LINQ查询缺少where条件

C# 使用反射在DbContext上编写等效LINQ查询缺少where条件,c#,.net,entity-framework,linq,system.reflection,C#,.net,Entity Framework,Linq,System.reflection,我似乎无法在LINQ查询的反射中创建等效的查询 目标是在实体框架DBContext上运行查询,但指定Tablename和where子句。有几个表,所以我不想为不同的表复制/粘贴相同的LINQ 下面的代码与LINQ一起工作,但是反射等效(尽管我将其转换为System.LINQ.IQueryable),不允许我添加.where子句 我包括使用System.Linq在类中 我在stackoverflow中研究的示例公开了Where()子句 可能是我忽略了一些次要的东西。(缺少参考资料?) 您需要强制转

我似乎无法在LINQ查询的反射中创建等效的查询

目标是在实体框架DBContext上运行查询,但指定Tablename和where子句。有几个表,所以我不想为不同的表复制/粘贴相同的LINQ

下面的代码与LINQ一起工作,但是反射等效(尽管我将其转换为
System.LINQ.IQueryable
),不允许我添加
.where
子句

我包括
使用System.Linq在类中

我在stackoverflow中研究的示例公开了Where()子句

可能是我忽略了一些次要的东西。(缺少参考资料?)


您需要强制转换到
IQueryable


是一种扩展方法,适用于
IQueryable
,而不是
IQueryable

,从技术上解决了问题。但是,我首先使用反射的原因是传递任何表名(所有表都具有相同的结构)。我可以使用
foreach(anyDbSet中的对象实体)
循环遍历结果集,然后对结果进行过滤,但初始结果集很大。我可以考虑不同的方法吗?你可以避免铸造,而用反射来调用<代码>可查询。在哪里<代码>。您可以停止与类型系统的冲突,转而使用SQL字符串,最终需要从SQL调用某种类型的
。您可以使用动态LINQ第三方库路由,我需要将我的
where子句
(谓词)定义为Lambda表达式,带有参数。。。。。(如果可能的话,我试图避免使用SQL字符串方法)
        // Link to TREESTRUCTURES Database
        var DaContext = new WebApplication7.Models.Db_Entities.TREE_STRUCTURESEntities();
        DaContext.Database.CommandTimeout=300;

        // This works 100% for "HEADCOUNT_NEW"
        var daTreeLeaves = DaContext.HEADCOUNT_NEW
            .Where(x => x.PARENT_COMPONENT == "" && x.COMPONENT_DESCRIPTION == "Headcounts")
            .Select(x => new { x.COMPONENT, x.COMPONENT_DESCRIPTION })
            .OrderBy(x => x.COMPONENT)
            .ToList();

        // Reflections! = This works - Selecting from "HEADCOUNT_NEW" or any other specified available table;
        PropertyInfo dbsetinfo = DaContext.GetType().GetProperties().FirstOrDefault(p => p.Name.ToUpper().Equals("HEADCOUNT_NEW"));

        // I can't seem to get the `.Where()` clause right here (although this code  does return values :) )
        // I omitted the Where here as it would not compile.
        System.Linq.IQueryable anyDbSet = ((IQueryable)dbsetinfo.GetValue(DaContext));

        // Below is my attempt (pseudocode), but the error 
        // "IQueryable does not contain a definition for Where" is returned by VStudio
        System.Linq.IQueryable anyDbSet2 = ((IQueryable)dbsetinfo.GetValue(DaContext)).Where("Id=" + pseudocode);