0

我是来自 MS Access 背景的 VB.Net 新手。我正在开发一个使用带有 SQL 后端的 linq 的程序。联系人有一个数据上下文。

也许这个插图会澄清。这是交给我的:

联系人表:

ContactID (PK)

a_ContactTypes 表:

ContactTypeID (PK)
ContactType

ContactTypes 联结表:

ContactTypeID (PK)
aContactTypeID
ContactID

假设我在Contacts表中有以下项目:

ContactID
---------
Contact1
Contact2
Contact3

ContactTypes以及 a_表中的以下项目:

ContactTypeID   ContactType
-------------   -----------
Type1           Business
Type2           Private

这就是 ContactTypes 联结表的样子:

ContactTypeID   ContactID  aContactTypeID
-------------   ---------  --------------
1               Contact1   Type1
2               Contact1   Type2
3               Contact3   Type2

Contact1Contact TypesPrivate和 也是如此BusinessContact2没有 Contact Types,Contact3只有 Contact Type Private。(这ContactTypeID两个表中两个不同的东西的含义有点混乱,但这是我手上的地段和一个小不便)

我能够进入网格的是 Linq 的以下内容:

Contact1   Business
Contact1   Private
Contact2   
Contact3   Private

我想用 Linq 进入网格的是:

ID         Business    Private
--------   --------    -------
Contact1   True        True
Contact2   False       False
Contact3   False       True

那么我是简单地创建一堆联系人对象并使用 for each 循环来填充联系人类型,还是在 linq 查询本身中有一种很好的、​​简洁的方法呢?

免责声明:我再说一遍,我主要从 MS Access VBA 背景迁移,所以我的术语(和整体知识)可能不正确。我已经搜索过,但似乎没有什么适合我想要做的事情,但我可能在没有正确术语(和整体知识)的情况下进行搜索。我还尝试将示例放入列表中,但看起来我没有正确应用星号。

4

1 回答 1

0

看看这段代码(来自这里)转换了. 您也许可以使用它:

Imports System
Imports System.Collections.Generic
Imports System.Linq

Namespace ReflectionIT.Training

    Public NotInheritable Class LinqExtenions
        Private Sub New()
        End Sub

        <System.Runtime.CompilerServices.Extension> _
        Public Shared Function Pivot(Of TSource, TFirstKey, TSecondKey, TValue)(source As IEnumerable(Of TSource), firstKeySelector As Func(Of TSource, TFirstKey), secondKeySelector As Func(Of TSource, TSecondKey), aggregate As Func(Of IEnumerable(Of TSource), TValue)) As Dictionary(Of TFirstKey, Dictionary(Of TSecondKey, TValue))
            Dim retVal = New Dictionary(Of TFirstKey, Dictionary(Of TSecondKey, TValue))()

            Dim l = source.ToLookup(firstKeySelector)
            For Each item As var In l
                Dim dict = New Dictionary(Of TSecondKey, TValue)()
                retVal.Add(item.Key, dict)
                Dim subdict = item.ToLookup(secondKeySelector)
                For Each subitem As var In subdict
                    dict.Add(subitem.Key, aggregate(subitem))
                Next
            Next

            Return retVal
        End Function

    End Class
End Namespace
于 2013-08-07T03:12:22.600 回答