在下面的代码中,我想在结果变量中添加一个过滤列表: -
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条件。任何帮助将不胜感激。
答案 0 :(得分:0)
由于您在通用集上运行,因此使用传统的LINQ Where
扩展方法无法正常工作。理想的解决方案是修改程序结构,而不必处理通用集。
如果您想坚持使用当前的程序结构,最好的办法是使用System.Linq.Dynamic
包,它允许您将查询定义为文本。您的代码将如下所示:
var result = db.Set(tableType).Where("Id = @0", IDtoEdit);
一些额外的动态Linq here