p.Title == "Test" && P.Status=0; myProjects = dataAccessHelper.GetMyDetails(id). -6ren">
gpt4 book ai didi

Lambda 表达式中的 C# 字符串连接

转载 作者:太空狗 更新时间:2023-10-29 23:15:12 24 4
gpt4 key购买 nike

String qry = "p => p.Title == "Test" && P.Status=0;

myProjects = dataAccessHelper.GetMyDetails(id).
Where(Append qry string here).ToList();

我正在尝试将我的查询字符串输出附加到 Lambda 表达式中的位置。如果我采取它工作正常

myProjects = dataAccessHelper.GetMyDetails(id).
Where(p => p.Title == "Test" && P.Status=0).ToList();

但不是这样

myProjects = dataAccessHelper.GetMyDetails(id).
Where("+ qry +").ToList();

我如何连接它并使 lambda 表达式起作用。

我的 Controller 代码

   [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);

}

最佳答案

您正在寻找的是函数表达式。您将需要 Where 子句的类型,我假设您的类型是 Project。

如果你正在使用 linq to sql 你将需要构造一个表达式

//assuming Project is type
Expression<Func<Project, bool>> expr = p => p.Title == "Test" && p.Status == 0;

如果你使用 linq to objects 那么你可以省略表达式

//assuming Project is type
Func<Project, bool> expr = p => p.Title == "Test" && p.Status == 0;

现在你可以在你的where子句中使用它了

myProjects = dataAccessHelper.GetMyDetails(id).Where(expr).ToList();

编辑

关于您的编辑。你不能真正传递一个字符串来做到这一点。最好的办法是传入“测试”和状态整数,然后将它们放入表达式中。

public virtual ActionResult MyProjects(int? id, string title = "Title", int status = 0)

然后

Func<Project, bool> expr = p => p.Title == title && p.Status == status;

关于Lambda 表达式中的 C# 字符串连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809246/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com