2016-10-21 63 views
0

Tabella_Pratiche實體是我的分貝,P_ListLettore是對象的列表。 當我嘗試並加入Tabella_PraticheP_ListLettore我產生異常。SQL的LINQ加入列表VB .NET

Dim listPraticheEsistenti As List(Of Tabella_Pratiche) 

listPraticheEsistenti = (From c In DB.Tabella_Pratiche Join b In P_ListLettore On c.posizione Equals b.AssignamentID And    c.data_affido.ToString("dd/MM/yyyy") Equals b.R_RecordPA.Data_inizio_affidamento.ToString("dd/MM/yyyy") Where c.tipo_mandato = "SPG" Select c).ToList 

異常「的類型 的 'System.NotSupportedException' 在EntityFramework.SqlServer.dll未處理的異常

其他信息:無法創建類型 'ImportPratiche.RecordPrSPG' 的恆定值在。這種情況下只支持 基本類型或枚舉。「

+1

今後請提供英語日期異常消息。另外有一個[西班牙SO(http://es.stackoverflow.com/),以及如果你喜歡在西班牙語(我知道這是意大利人,但這些都是我knowof唯一的操作系統)進行通信。該錯誤是因爲你不能在內存中的列表,並且將使用LINQ to SQL(仍然在數據庫上)訪問列表,使用之間的聯接語法。如果你想有一個基本相當於你可以使用'Contains'這是支持的,將被翻譯成數據庫上了'IN'條款,但這僅支持簡單類型的列表一樣的''int'或STRING'列表。 – Igor

+0

你能給我一個例子嗎? – ruosco82

+0

你也不能使用的ToString(「」),.NET這是一個概念,也不會轉化爲SQL。這可能是問題所在。我不讀意大利,所以我猜在這裏,也有可能會在代碼中的其他問題。 – Igor

回答

1

像@Igor在他的評論中寫道,你不能加入的,我有數據庫的對象的多個列表。
這是兩到實體框架試圖轉換爲LINQ到SQL語句並P_ListLettore在數據庫中,因此不明就裏的實體框架是未知的。

你可以做的是從第一加載數據和「加盟」內存數據庫之後(下面的代碼是完全未經測試):

'IEnumerable with AssignamentIDs' 
    Dim assignmentIDs = From p In P_ListLettore 
         Select p.AssignamentID 

    'Load Tabella_Pratiche with matching IDs from DB and convert into in-memory List' 
    Dim tmpPratiche = (From c In DB.Tabella_Pratiche 
         Where c.tipo_mandato = "SPG" And assignmentIDs.Contains(c.posizione) 
         Select c).ToList() 

    ' Perform Join on both in-memory lists with ID and Date' 
    Dim listPraticheEsistenti = (From c In tmpPratiche 
           Join b In P_ListLettore On c.posizione Equals b.AssignamentID 
             And c.data_affido Equals b.R_RecordPA.Data_inizio_affidamento 
            Select c).ToList 

注意,你只能使用一個小的九月在一個查詢功能.NET LINQ2SQL,Date.ToString(format)不會例如工作。

+0

有一個錯誤的問題無法將類型的值「<匿名類型>(線130)」在「<匿名類型> – ruosco82

+0

我不希望加載P_LISTALETTORE在數據庫 – ruosco82

+0

你不必加載P_LISTALETTORE。你必須加載所有'Tabella_Pratiche',環over' P_LISTALETTORE'並檢查是否''posizione'和data_affido'是等於''AssignamentID'和Data_inizio_affidamento'。這會更慢,但應該工作。編輯我的答案上週一當我回到辦公室時 –