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

时间:2017-08-19 17:00:32

标签: c# asp.net-mvc entity-framework linq

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

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 };
        }

    }

正如您所看到的,我在JsonResult中传递了Table Name和IDtoEdit。因此,我在&#39;结果&#39;中提取数据库中的所有记录。变种。 但是我无法过滤我的结果&#39;根据where条件。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

由于您在通用集上运行,因此使用传统的LINQ Where扩展方法无法正常工作。理想的解决方案是修改程序结构,而不必处理通用集。

如果您想坚持使用当前的程序结构,最好的办法是使用System.Linq.Dynamic包,它允许您将查询定义为文本。您的代码将如下所示:

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

一些额外的动态Linq here