gpt4 book ai didi

c# - 是否可以构建基于 EF 元数据的动态查询?

转载 作者:太空宇宙 更新时间:2023-11-03 21:37:24 27 4
gpt4 key购买 nike

作为第一步,我正在尝试确定以下操作是否可行。

本质上,我想创建一种机制,从字段名称(字符串)和值中,我可以动态地在实体的元数据中找到字段名称,并根据该信息创建 Linq 查询。

假设我只需要关心单个表,表上的列都是strings/varchars。

例如,如果我有一张 table :

MyTable
-----------------
Field1
Field2
Field3
etc.

并且此表已在 EF 中生成,我将能够执行如下操作:

var result = CreateDynamicQuery("Field3", "我的值");

而且我能够将其转换为 EF/Linq 查询。

需要这样做的原因很复杂,但更传统的查询机制在这种情况下不起作用。我试图避免的是基于字符串的 SQL 解决方案。

这样的事情可能吗?

最佳答案

下面是一个示例,说明如何使用 linq 表达式树和 Entity Framework 构建查询以进行简单的动态查询:

public void TestEF()
{
using (DbContext db = new ElFaktura.Data.CustomerEntities())
{
var expr = CreateQuery<Customer>("FirstName", "Lorentz");
var result = db.Set<Customer>().Where(expr);
Debug.Print(result.ToString());
}
}

public Expression<Func<Customer, bool>> CreateQuery<T>(string field, string value)
{
var paramExpr = Expression.Parameter(typeof(T));
var propExpr = Expression.Property(paramExpr, field);
var equalsExpr = Expression.Equal(propExpr, Expression.Constant(value));
return Expression.Lambda<Func<Customer,bool>>(equalsExpr, paramExpr);
}

生成的sql是

SELECT 
[Extent1].[ID] AS [ID],
[Extent1].[Email] AS [Email],
[Extent1].[AddressID] AS [AddressID],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[LastName] AS [LastName]
FROM [dbo].[Customers] AS [Extent1]
WHERE (N'Lorentz' = [Extent1].[FirstName])

关于c# - 是否可以构建基于 EF 元数据的动态查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050521/

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