使用条件标准的linq字段

时间:2013-08-07 00:06:47

标签: vb.net linq

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

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

联系人表格:

ContactID (PK)

a_ContactTypes表:

ContactTypeID (PK)
ContactType

ContactTypes联结表:

ContactTypeID (PK)
aContactTypeID
ContactID

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

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

a _ ContactTypes表中的以下项目:

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

这就是ContactTypes联结表的样子:

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

因此Contact1有联系类型PrivateBusinessContact2没有联系类型,Contact3只有联系类型Private。 (ContactTypeID意味着两个表中的两个不同的东西有点令人困惑,但这是我交出的很多,并且有轻微的不便)

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

Contact1   Business
Contact1   Private
Contact2   
Contact3   Private

我想与Linq进入网格的是:

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

所以我只是简单地创建一堆Contact对象并使用for循环来填充联系人类型,或者在linq查询本身中有一个很好的,简洁的方法吗?

免责声明:我重申我正在从主要的MS Access VBA背景转变,因此我的术语(以及整体知识)可能会被取消。我已经搜索过,但似乎没有任何东西适合我想要做的事情,但我可能正在搜索没有正确的术语(和整体知识)。我也尝试将示例放入列表中,但看起来我没有正确应用星号。

1 个答案:

答案 0 :(得分:0)

查看此代码(Sourced from here)converted。您可以使用它:

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