【发布时间】:2018-12-26 16:57:23
【问题描述】:
我想在我的 Select 子句中使用一些动态条件。 所以我想创建一个像“SELECT * FROM TABLE”这样的“基本查询”,然后我想添加像“WHERE name = 'Diego' AND ...”这样的条件。 我正在使用Entity Core,我找到的解决方案(它正在工作)如下:
//conditions
Expression<Func<Person, bool>> foo = (p => p.Id == 1);
//select
List<Person> people = Db.People.Where(foo).ToList();
//Db is the context, People is the DbSet and Person is the model
我希望有一个简单或标准的方法来做到这一点,事实上我已经尝试了一些,但它们没有奏效。
我在哪里可以找到关于它的好教程,从简单到复杂?
---------- 更新 ------------- -----
好吧,这个问题已标记为重复,但这个 Multiple .Where() clauses on an Entity Framework Queryable 对我不起作用,我不知道为什么,但语句在条件之前执行,(如果我做与答案相同的事情在链接上),我想在第一条语句执行之前应用条件。是的,我知道我必须在最后使用 toList(),无论如何,如果我做与该链接上的答案相同的事情,该语句将在之前执行,我同意这很奇怪。
---------- 更新 ------------- -----
我在下面的图片中为我所说的内容提供了某种证据:
这里我们执行了一个语句(结果是一个 Person 对象),在这个例子中我使用了我上面写的代码。
这里我们可以看到,代码:queryable = Db.People.Where(p => p.Name.Contains("El"));,被执行(结果是两个Person对象),即使没有方法 ToList(),在这个例子中我使用了建议的代码。
嗯,也许这是一个实体核心错误。 无论如何,这个问题与出于多种原因而链接的问题不同。
【问题讨论】:
-
您的代码有效吗?这是正确的做法!不过,我不会打扰
foo变量,只需将其直接放在Where子句中:.Where(p => p.Id == 1)。除此之外,我不确定您在说什么,或者这个问题是基于意见的。 -
@DavidG 我认为 Diego 想做这样的事情:stackoverflow.com/questions/6353350/…
-
@RuiJarimba 是的,你可能是对的,但除非你完全确定这是他要求的,否则我将保留判断。
-
@RuiJarimba 你是对的,我希望能够动态添加更多条件
-
向我们展示您对重复答案的尝试。
标签: asp.net linq entity-framework-core