使用布尔表达式查询 C# Entity Framework?

3

我对Entity非常陌生,我正在尝试查找与作为字符串传递的布尔条件匹配的DbSet对象中的所有元素:

Example: 
string condition = "Weight > 30 && Age == 20";
var results = context.Data.FindIf(condition);

其中,Weight和Age是Data的属性,给定的布尔条件可以变化。我可以轻松使用LINQ表达式进行硬编码,但是否有一种以我描述的方式进行操作的方法呢?


2
请查看名为Dynamic LINQ的代码示例。 - Adriano Repetti
3个回答

5

2

你可以使用 原始SQL查询 并对其执行常规SQL语句吗?

context.Database.SqlQuery<Data>("SELECT * FROM [DataTable] WHERE Weight > 30 AND Age = 20");

我收到了一个布尔字符串条件,必须对其进行处理,除非我从该字符串构造一个SQL查询,否则我无法使用SQL查询。 - Booley
你可以使用表达式树。 - tdbeckett
这个条件是否保证是有效的LINQ查询,还是你必须无论如何都要验证它?如果你必须无论如何都要处理它,那么我认为这个答案是一个易于理解的候选者,但如果你知道它将是有效的LINQ,我建议使用@tdbeckett的答案。 - Steve Danner

1
你可以使用DynamicLinqQuery库来对IQueryable源使用字符串表达式。该库是在MSDN文章中描述的Expression tree和动态查询构建器功能之上构建的,由@tdbeckett共享。
它允许您将动态条件编写为字符串,例如: using System.Linq.Dynamic; var query =     db.Customers.     Where("City = @0 and Orders.Count >= @1", "London", 10); 有一个Nuget包可用于此:

Install-Package DynamicQuery

安装完成后,您可以在项目中找到添加的HTML文件以获取帮助文档。

谢谢,这正是我所需要的,运行得非常好!供其他人参考,我使用了 var results = db.Data.Where(queryRequest);,其中 queryRequest 是一个包含布尔表达式的字符串。 - Booley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接