gpt4 book ai didi

c# - 使用 LINQ 时从字符串访问 lambda 表达式中的属性

转载 作者:太空狗 更新时间:2023-10-30 00:27:19 26 4
gpt4 key购买 nike

我怎样才能做这样的事情:

var result = db.MyTable.Where(x => x."MyProperty" == "Test" );

如您所见,我想访问“MyProperty”,但将属性名称作为字符串提供。

最佳答案

你可以使用反射

x.GetType( ).GetProperty("MyProperty").GetValue( x, null ); 

虽然这可能有效,但我不建议这样做,为什么不将您的 where 子句作为表达式传递:

myMethod<T>(Expression<Func<T,bool>> where)

评论后的例子:

考虑以下类型:

你看到有 name 是 string 类型的 id 是 int 类型的三个属性。现在,如果我们将数据库上下文包装在这样的服务中

public class MyTypeOfXService
{
private DataDataContext Context;
public MyTypeOfXService()
{
Context = new DataDataContext("example code");
}

public IQueryable<MyTypeOfX> GetTypeOfX(Expression<Func<MyTypeOfX, bool>> where)
{
return this.Context.MyTypeOfXes.Where(where);
}
}

在我们的 get 方法中有一个 Expression 参数接受两个泛型,第一个是我们的类型 x,第二个是 bool 值。这种方法的优点是我们可以抽象所有数据上下文的创建并且只在我们的代码中表达一个 where 子句看最后一段代码:

class Program
{
static void Main(string[] args)
{
var service = new MyTypeOfXService();

var queryById = service.GetTypeOfX((mytype) => mytype.Id == 1);
var queryByName = service.GetTypeOfX((mytype) => mytype.Name == "MyName");
var queryByName = service.GetTypeOfX((mytype) => mytype.Name == "MyName" && mytype.Id == 1);
}
}

如您所见,我们可以在任何属性或属性组合上构建 where 子句。

关于c# - 使用 LINQ 时从字符串访问 lambda 表达式中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7017282/

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