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构建。如果您计划使用查询并对其进行修改,即添加其他筛选器、联接、跳过/接受等,则这是一个坏主意。

您尝试过任何查询吗?