2013-08-07 27 views
0

我是新來的VB.Net來自MS Access背景。我正在研究一個使用linq和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 

所以我簡單地創建了一堆的聯繫對象,並使用每個循環,填補了接觸類型還是有在LINQ查詢本身內部完成這個工作的好方法嗎?免責聲明:我再說一遍,我正從一個主要的MS Access VBA背景轉移,所以我的術語(和整體知識)可能會關閉。我已經搜索過,但似乎沒有什麼符合我想要做的,但我可能在搜索時沒有使用正確的術語(和整體知識)。我也嘗試將這個例子放入列表中,但它看起來並不像我正確應用星號。

+0

使用編輯器中的代碼按鈕來格式化_code_塊。 http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks –

+0

請至少努力設置您的帖子的格式。輸入文本區域右上方的橙色「{?}」按鈕說明如何操作。另外,請不要在標題中加入標籤信息。這裏的標記系統非常擅長對事物進行分類,並且不需要幫助。 :-)請參閱[應的問題包括「標籤」,在他們的頭銜?(http://meta.stackexchange.com/q/19190/172661)。謝謝。:-) –

+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 
+0

嗨,蒙蒂。這看起來像醫生所訂購的。我從來沒有使用過Dictionary類,但是我做了一些研究,看起來它應該完全按照我的需要來做。我會明天嘗試一些代碼,並讓你知道它是如何發生的。非常感謝你指引我朝這個方向發展。 –