如何使用LINQ to SQL对分层数据进行查询?

3
我有两个相关的表格。每个应用程序可以与许多应用程序相关联。例如,Office可以与Word、Excel等相关联。
表格app包括: id PK int appname varchar(50) ......
表格appsrelated包括: relatedid int fk to app.id appid int
样例数据如下: app id, appname 1, office 2, word 3, excel 4, quake appsrelated relatedid, appid 1, 2 1, 3
我想要执行以下查询。我使用vb.net,但c#也可以。查询是返回所有未与1相关联的应用程序,因此结果应为(4,quake)。
谢谢您的帮助。

这个结构允许任意深度,但示例只显示了两个级别。我们可以依赖于只有两个级别吗? - Amy B
我在我的回答中假设了只有两个级别。 - tvanfosson
3个回答

2
如果我理解正确,以下代码应该可以完成您的要求。
var relatedToApp1 = Context.appsrelated.Where(related => related.relatedid == 1);
var items = Context.app.Where(app => app.id != 1 && !relatedToApp1.Any(related => related.appid == app.id));

1

C# -- 找到相关应用程序的ID,选择ID,仅选择不是问题应用程序或其ID未出现在相关应用程序的ID中的应用程序。

var query = apps.Where( a => a.appid != 1
                             &&  !appsrelated.Where( r => r.relatedid == 1 )
                                             .Select( r => r.appid )
                                             .Contains( a.appid ) );

0

对于VB开发者,这是查询的结果。

Dim dc As New dashboardDataContext  
Dim q = dc.appsrelateds _  
.Where(Function(r) r.relatedid = 17)

Dim items = dc.ApplicationInfos _  
    Where(Function(app) app.Id <> 17 And Not q.Any(Function(related) related.appid = app.Id))

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