【发布时间】:2014-11-06 13:58:15
【问题描述】:
首先要做的是 - 我在 Visual Studio 2012 中使用 C# 连接到 SqlServerCe 数据库。 我正在使用实体框架 6 和 Linq 来执行此功能。 所以 - 关于这个问题。
我有一张如下表
ItemGroup
(
ID INT PRIMARY KEY,
ItemID INT,
GroupID INT
)
有两个表通过它们的 ID 和 Item Group 表中的两个外键列链接到这个(Items 和 Groups)。
每个项目可以是一个组的一部分,每个组可以有多个项目。
如果项目的组 ID 为 0,则认为它不是组的一部分
这样的结果是大约有 3000 个组,每个组有 2 -> ~30 个项目,但有一个组有大约 4000 个项目。
我的问题是我有一个项目列表,我想从每个组中只返回一个,除非该项目是第 0 组的一部分(即没有组)。在第 0 组的情况下,我想返回所有匹配的项目。
例如:
**Group 0**
*Item 1,
Item 2,
Item 3,*
**Group 1**
*Item 4,
Item 5*
**Group 2**
*Item 6,
Item 7,
Item 8*
**Group 3**
*Item 9*
我有以下项目的清单:
*Item1, Item2, Item4, Item5, Item6, Item7*
在这种情况下,我想输出列表中第 0 组中的所有项目:
*Item1, Item2*
第 4 项是第 1 组的一部分,所以我们想显示它,但由于第 5 项是同一组的一部分,我们不希望这样,所以我的列表的其余部分将显示如下:
*Item4, Item6*
提供完整列表:
*Item1, Item2, Item4, Item6*
我尝试了几种方法,主要是通过使用联合,我首先获取属于第 0 组的所有记录,然后首先对其他记录进行分组,然后将它们联合在一起以获得最终结果。
然而,这似乎效率极低,并且需要很长时间才能执行 - 更不用说 Linq 语句很难遵循。
有人可以指出我可以遵循的方向以执行此功能吗?
【问题讨论】:
-
您可以发布相关表的架构吗?
标签: c# linq visual-studio-2012 entity-framework-6 sql-server-ce-4