【问题标题】:Is there a way to do this with a LINQ Query?有没有办法用 LINQ 查询来做到这一点?
【发布时间】:2011-05-05 21:20:47
【问题描述】:

>

在我的存储库中,我声明 IQueryable<Foo> foosConfigEntities db = new ConfigEntities() 然后我使用 linq 查询来查询数据库

foos = from f in _db.Foos
       select f;

每个 Foo 都有一个单独的 EntityCollection<Bar> bars 集合,由实体框架自动填充。

我想遍历 foos 集合每个 Foo 中的 bar 集合,并根据日期修改 bar 集合,例如:

from foo in foos
    (from bar in foo.bars
         where bar.Date < someDate && bar.Date >= someOtherDate
         select bar)
     select foo

所以我得到了 all 的 foo 和 一个子集 的原始条。我不知道怎么做,但我想我想在一个选择或类似的东西中做一个选择。

任何帮助将不胜感激。

【问题讨论】:

  • 嗯,这对我来说似乎有点相反:已经存在一定时间的集合中的条目如何具有值为DateTime.Now 的条目?您不想选择其属性值Date 在特定范围内的条目吗?我(错误)理解,您只是想将属性 Date 设置为 DateTime.Now,不是吗?
  • 我很抱歉 - DateTime.Now 的使用仅用于说明目的。实际上,我确实在检查某个范围内的日期。我将编辑以反映相同的内容。

标签: linq entity-framework c#-3.0 linq-to-entities


【解决方案1】:
from foo in foos
from bar in foo.bars
where bar.Date == DateTime.Now
select new { foo, bar }

或(已编辑,考虑到您没有Foo 的相应构造函数)

from foo in foos
select new
{
  Foo = foo, 
  Bars = from bar in foo.bars
         where bar.Date == DateTime.Now
         select bar
}

这将给出一个“元组”的集合,其中每个元组将包含原始的Foo(以及所有Bars)以及您想要的Bars 的集合。

【讨论】:

  • 对于您的第一个示例 - 每次有一个匹配 bar 的 foo 时,不会创建一个新的 foo 和 bar 对象吗?即 foo1 具有与 where 子句匹配的 bar = bar1、bar2、bar3 的数组 - Ex1 不返回 fooA 和 BarA、fooB 和 BarB、FooC 和 BarC?在我看来,每次条匹配它也会创建一个新的 foo
  • 看起来您可能对 Example2 感兴趣 - 我一定会在星期一检查一下!
  • @ScottSEA:不,第一个查询不会创建任何 Foo 或 Bars,它会返回每个匹配的 Bar 以及相应的 Foo。
  • 我没有示例 2 的构造函数 - 感觉非常像我正在寻找的东西。问题是 EntityCollection &lt;Bar&gt; bars 集合是由实体框架动态创建的 - select bar 行返回一个 IQueryable,而不是一个 EntityCollection 我真的很难过。
猜你喜欢
  • 2021-07-09
  • 1970-01-01
  • 2011-06-09
  • 2015-06-15
  • 2011-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多