Kur*_*ula 5 c# string lambda string-concatenation
String qry = "p => p.Title == "Test" && P.Status=0;
myProjects = dataAccessHelper.GetMyDetails(id).
Where(Append qry string here).ToList();
Run Code Online (Sandbox Code Playgroud)
我试图将我的查询字符串输出附加到Lambda表达式中的位置.如果我拿它,它工作正常
myProjects = dataAccessHelper.GetMyDetails(id).
Where(p => p.Title == "Test" && P.Status=0).ToList();
Run Code Online (Sandbox Code Playgroud)
但不是这样的
myProjects = dataAccessHelper.GetMyDetails(id).
Where("+ qry +").ToList();
Run Code Online (Sandbox Code Playgroud)
我如何连接这个并使lambda表达式起作用.
我的控制器代码
[HttpGet]
public virtual ActionResult MyProjects(int? id, string qry)
{
var dataAccessHelper = new DataAccessHelper(true);
IList<ProjectEntity> myProjects;
if (qry == null)
{
myProjects = dataAccessHelper.GetMyProjects(id);
}
else
{
Expression<Func<ProjectEntity, bool>> expr = qry;
myProjects = dataAccessHelper.GetMyProjects(id).Where(expr).ToList();
}
var myProjectsViewModel = new MyProjectsViewModel() { GetMyProjects = myProjects };
return View(myProjectsViewModel);
}
Run Code Online (Sandbox Code Playgroud)
您正在寻找的是函数表达式。您将需要该子句的类型Where,我假设您的类型是项目。
如果您使用 linq to sql,则需要构造一个表达式
//assuming Project is type
Expression<Func<Project, bool>> expr = p => p.Title == "Test" && p.Status == 0;
Run Code Online (Sandbox Code Playgroud)
如果您使用 linq to 对象,则可以省略表达式
//assuming Project is type
Func<Project, bool> expr = p => p.Title == "Test" && p.Status == 0;
Run Code Online (Sandbox Code Playgroud)
现在您可以在 where 子句中使用它
myProjects = dataAccessHelper.GetMyDetails(id).Where(expr).ToList();
Run Code Online (Sandbox Code Playgroud)
编辑
关于您的编辑。您实际上无法传递字符串来执行此操作。最好的选择是传入“测试”和状态整数,然后将它们放入表达式中。
public virtual ActionResult MyProjects(int? id, string title = "Title", int status = 0)
Run Code Online (Sandbox Code Playgroud)
进而
Func<Project, bool> expr = p => p.Title == title && p.Status == status;
Run Code Online (Sandbox Code Playgroud)