C# 如何使用LINQ或EF在列表中添加过滤结果?

C# 如何使用LINQ或EF在列表中添加过滤结果?,c#,asp.net-mvc,entity-framework,linq,C#,Asp.net Mvc,Entity Framework,Linq,在以下代码中,我想在我的结果变量中添加一个过滤列表:- public JsonResult FetchDataForEdit() { int IDtoEdit = Convert.ToInt32(TempData["IDtoEdit"]); string MyTableName = Convert.ToString(TempData["MyTableName"]); try { Type table

在以下代码中,我想在我的结果变量中添加一个过滤列表:-

public JsonResult FetchDataForEdit()
    {
        int IDtoEdit = Convert.ToInt32(TempData["IDtoEdit"]);
        string MyTableName = Convert.ToString(TempData["MyTableName"]);

        try
        {
            Type tableType = typeof(CourseDesc);
            switch (MyTableName)
            {
                case "CourseTbl":
                    tableType = typeof(CourseTbl);
                    break;
                case "CourseDescTbl":
                    tableType = typeof(CourseDesc);
                    break;
                case "CourseSubDesc":
                    tableType = typeof(CourseSubDesc);
                    break;
                case "InternTbl":
                    tableType = typeof(InternShip);
                    break;
                case "ContactTbl":
                    tableType = typeof(Contact);
                    break;
            }

            using (EBContext db = new EBContext())
            {
                var results = new List<object>();
                foreach (var item in db.Set(tableType))
                {
                    //Want to Add result for selected IDtoEdit here like (db.Set(tableType).Where(x=>x.Id==IDtoEdit))
                    results.Add(item);
                }

                return new JsonResult { Data = results, JsonRequestBehavior = JsonRequestBehavior.AllowGet };
            }

        }

        catch (Exception ex)
        {
            string innerMessage = (ex.InnerException != null) ? ex.InnerException.Message : "";
            return new JsonResult { Data = "Not Found", JsonRequestBehavior = JsonRequestBehavior.AllowGet };
        }

    }
public JsonResult FetchDataForEdit()
{
int-IDtoEdit=Convert.ToInt32(TempData[“IDtoEdit”]);
字符串MyTableName=Convert.ToString(TempData[“MyTableName”]);
尝试
{
类型tableType=类型(CourseDesc);
开关(MyTableName)
{
案例“CourseTbl”:
tableType=类型(CourseTbl);
打破
案例“CourseDescTbl”:
tableType=类型(CourseDesc);
打破
案例“课程主题”:
tableType=类型(CourseSubDesc);
打破
案例“InternTbl”:
tableType=typeof(实习);
打破
案例“ContactTbl”:
tableType=类型(触点);
打破
}
使用(EBContext db=new EBContext())
{
var results=新列表();
foreach(数据库集中的变量项(tableType))
{
//要在此处添加所选IDtoEdit的结果,如(db.Set(tableType).Where(x=>x.Id==IDtoEdit))
结果:增加(项目);
}
返回新的JsonResult{Data=results,JsonRequestBehavior=JsonRequestBehavior.AllowGet};
}
}
捕获(例外情况除外)
{
字符串innerMessage=(ex.InnerException!=null)?ex.InnerException.Message:;
返回新的JsonResult{Data=“notfound”,JsonRequestBehavior=JsonRequestBehavior.AllowGet};
}
}
如您所见,我正在JsonResult中传递表名和IDtoEdit。因此,我在'results'变量中从数据库获取所有记录。
但我无法根据where条件筛选“结果”。任何帮助都将不胜感激

因为您是在一个泛型集合上操作,所以使用传统的LINQ
Where
扩展方法将不起作用。理想的解决方案是修改程序结构,而不必处理泛型集

如果您想继续使用当前的程序结构,那么最好使用这个包,它允许您将查询定义为文本。您的代码将如下所示:

var result = db.Set(tableType).Where("Id = @0", IDtoEdit);

一些额外的动态Linq

你说“不能”是什么意思?如果您尝试,会发生什么情况?我这样尝试:-
var results=new List();results=db.Set(tableType),其中(x=>x.Id==IDtoEdit)但给我错误:-dbset不包含定义,当我不能使用“Where”时,我可以使用什么来获取所需的条件结果?感谢您的回复。当我应用此代码时:-
使用(EBContext db=new EBContext()){var results=db.Set(tableType)。其中(“Id=@0”,IDtoEdit);返回新的JsonResult{Data=results,JsonRequestBehavior=JsonRequestBehavior.AllowGet};}
It's giving me error:-操作无法完成,因为DbContext已被释放。