【问题标题】:Is this the correct way to add conditions using LINQ (for database queries)? [duplicate]这是使用 LINQ(用于数据库查询)添加条件的正确方法吗? [复制]
【发布时间】: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 =&gt; p.Id == 1)。除此之外,我不确定您在说什么,或者这个问题是基于意见的。
  • @DavidG 我认为 Diego 想做这样的事情:stackoverflow.com/questions/6353350/…
  • @RuiJarimba 是的,你可能是对的,但除非你完全确定这是他要求的,否则我将保留判断。
  • @RuiJarimba 你是对的,我希望能够动态添加更多条件
  • 向我们展示您对重复答案的尝试。

标签: asp.net linq entity-framework-core


【解决方案1】:

这里我们可以看到,代码:queryable = Db.People.Where(p => p.Name.Contains("El"));,被执行(结果是两个Person对象),即使没有方法 ToList(),在此示例中,我使用的是建议的代码。

抱歉,您看到的是您接受允许表达式运行这一事实。它确实运行,直到您按照自己的屏幕截图所述打开结果:

所以这是重复的,你只是不熟悉本地/监视窗口的工作方式。

【讨论】:

  • 哦...我真的很抱歉,我不知道...我现在该怎么办?我可以结束这个问题吗?
猜你喜欢
  • 2011-03-20
  • 1970-01-01
  • 2013-10-29
  • 2021-07-16
  • 1970-01-01
  • 2021-02-20
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多