C# 仅使用字段名构建linq表达式
我有如下三节课C# 仅使用字段名构建linq表达式,c#,asp.net,linq,entity-framework,lambda,C#,Asp.net,Linq,Entity Framework,Lambda,我有如下三节课 public class User : BaseEntity { public string Name { get; set; } public string Surname { get; set; } } public class Product { public string Name { get; set; } [ForeignKey("AddUser")] public int? AddUserId { get; set
public class User : BaseEntity
{
public string Name { get; set; }
public string Surname { get; set; }
}
public class Product
{
public string Name { get; set; }
[ForeignKey("AddUser")]
public int? AddUserId { get; set; }
public virtual User AddUser { get; set; }
}
public class Jobs
{
public string Name { get; set; }
[ForeignKey("AddUser")]
public int? AddUserId { get; set; }
public virtual User AddUser { get; set; }
}
我想构建查询来选择一些实体
但我将通过从db中读取一些值来构建查询。
例如,我有以下字符串
1- "Product",
"Name = "abc"
2- "Jobs",
"Name" = "abc"
3- "Product",
"AddUser.Name" = "abc"
4- "Jobs",
"AddUser.Name" = "abc" || "Name" = "abc"
现在我需要一个函数来构建正确的查询
我的应用程序语言是c,我正在使用asp.net。
我需要实体框架的查询。
我应该做什么。有一些方法可以做到: 1硬编码每个可能的表和列名,如下所示:
if (tableName == "Jobs") query = query.Where(...)
如果您真的确定数据模型将来不会有任何更改,并且表和列的数量很小,那么这是一个很好的解决方案。否则,这是一个非常糟糕的解决方案
2使用
使用此库,可以从字符串创建表达式树。不要忘记安全问题,因为让用户有权创建自己的SQL查询不是一个好主意
3.建立自己的表达树。以下是一篇好文章的开头:
这是一个非常复杂的解决方案,它允许你控制你想要的一切。如果您希望提供的操作数量有限,这是一个很好的解决方案
4使用StringBuilder类从字符串生成SQL,然后执行SQL。以下是一篇文章:
当然,由于安全问题,您应该非常小心地使用这个SQL构建。如果您计划使用查询并对其进行修改,即添加其他筛选器、联接、跳过/接受等,则这是一个坏主意。您尝试过任何查询吗?