构建仅包含字段名称的 linq 表达式
Building a linq expression with only field names
我有三个类如下
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; }
}
我想构建对 select 一些实体的查询。
但我将通过从 db
中读取一些值来构建查询。
例如我有以下字符串
1- "Product",
"Name = "abc"
2- "Jobs",
"Name" = "abc"
3- "Product",
"AddUser.Name" = "abc"
4- "Jobs",
"AddUser.Name" = "abc" || "Name" = "abc"
现在我需要一个函数来构建正确的查询。
我的应用程序语言是 c#,我正在使用 asp.net。
我需要查询 entity framework。
我该怎么办
有一些方法可以做到:
1) 对每个可能的 table 和列名进行硬编码,如下所示:
if (tableName == "Jobs") query = query.Where(...)
如果您真的确定数据模型将来不会发生变化,并且 table 和列的数量很少,那么这是一个很好的解决方案。否则,这是一个非常糟糕的解决方案。
2) 使用 http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library
使用此库,您可以从字符串创建表达式树。不要忘记安全问题,因为让用户有权创建自己的 SQL 查询并不是一个好主意。
3) 构建您自己的表达式树。这是一篇很好的文章:http://msdn.microsoft.com/en-us/library/bb882637.aspx
这是一个最复杂的解决方案,它允许您控制您想要的一切。如果您想提供的操作数量有限,这是一个很好的解决方案。
4) 使用 StringBuilder class 从字符串构建 SQL,然后执行 SQL。这是一篇文章:http://msdn.microsoft.com/en-us/data/jj592907.aspx
当然,由于安全问题,您应该非常小心这座 SQL 大楼。如果您打算使用查询并修改它们(即添加额外的过滤器、连接、skip/take 等),那么这是一个坏主意。
我有三个类如下
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; }
}
我想构建对 select 一些实体的查询。
但我将通过从 db
中读取一些值来构建查询。
例如我有以下字符串
1- "Product",
"Name = "abc"
2- "Jobs",
"Name" = "abc"
3- "Product",
"AddUser.Name" = "abc"
4- "Jobs",
"AddUser.Name" = "abc" || "Name" = "abc"
现在我需要一个函数来构建正确的查询。
我的应用程序语言是 c#,我正在使用 asp.net。 我需要查询 entity framework。 我该怎么办
有一些方法可以做到:
1) 对每个可能的 table 和列名进行硬编码,如下所示:
if (tableName == "Jobs") query = query.Where(...)
如果您真的确定数据模型将来不会发生变化,并且 table 和列的数量很少,那么这是一个很好的解决方案。否则,这是一个非常糟糕的解决方案。
2) 使用 http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library 使用此库,您可以从字符串创建表达式树。不要忘记安全问题,因为让用户有权创建自己的 SQL 查询并不是一个好主意。
3) 构建您自己的表达式树。这是一篇很好的文章:http://msdn.microsoft.com/en-us/library/bb882637.aspx 这是一个最复杂的解决方案,它允许您控制您想要的一切。如果您想提供的操作数量有限,这是一个很好的解决方案。
4) 使用 StringBuilder class 从字符串构建 SQL,然后执行 SQL。这是一篇文章:http://msdn.microsoft.com/en-us/data/jj592907.aspx 当然,由于安全问题,您应该非常小心这座 SQL 大楼。如果您打算使用查询并修改它们(即添加额外的过滤器、连接、skip/take 等),那么这是一个坏主意。