【问题标题】:C# Using Dynamic string or query in lambda expressionC# 在 lambda 表达式中使用动态字符串或查询
【发布时间】:2018-05-10 07:05:39
【问题描述】:

我正在尝试使用动态 where 条件编写 c# lambda 表达式,并尝试了解 where 条件中的内容类型。如何在 where 子句中动态调用该内容?

我这里以字符串为例

string query1 = "p=>p.id == 1 && p.name==\"abc\" ";
string query2 = "p=>p.id == 2 && p.name==\"def\" ";

//Normal Lambda Expression:
var details = _db.MyTable.Where(p=>p.id == 1 && p.name=="abc")

//Trying to check these if it works 
var details1 = _db.MyTable.Where(query1)

var details2 = _db.MyTable.Where(query2)

【问题讨论】:

  • 您是否尝试在查询中进行分配?我认为这行不通。
  • where 子句中的类型是什么?我们如何动态分配子句?
  • 您也许可以使用动态 linq。
  • 您是如何(以及为什么)构建该字符串的?解决这个问题并直接构建 Lambda 表达式可能会更好。
  • 我正在尝试通过根据几个条件更改我的 where 条件来使用单个 lambda 表达式。

标签: c# lambda


【解决方案1】:

Lambda 表达式可以在其范围内使用变量,因此您可以将其写为:

int queryId = 1;
string queryName = "abc";
var details = _db.MyTable.Where(p=>p.id == queryId && p.name== queryName);

通过这种方式,您可以动态确定 queryIDqueryName 是什么,并将它们传递给 lambda 表达式。我还假设您打算使用 == 检查是否相等,而不是使用 = 进行分配。

【讨论】:

  • 还有:if (queryId != 0) details = details.Where(p=> p.id==queryID); if (!string.IsNullOrEmpty(queryName)) details = details.Where(p => p.name == queryName);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多