簡體   English   中英

LINQ to SQL加入問題

[英]LINQ to SQL Join issues

我正在嘗試在我的代碼中使用以下LINQ to SQL:

  (from s in dc.Accounts 
  join purchases in dc.Transactions on s.AccID equals purchases.Account into pu
  join pop in dc.POPTransactions on new { s.ID, syncNo } equals new {AccId = pop.AccountID, SyncNo = pop.SyncNo } into po
  where s.AccID == ID && s.Customer == false
  select new AccsandPurchase { acc = s, purchases = pu.ToList(), pop = po.ToList() } ));

錯誤發生在第二個連接線上(上面整個查詢中的第3行) - 我曾經擁有它所以它剛剛加入了s.ID和pop.AccountID並且工作得很完美,但現在我引入了另一個連接標准(syncno) )我收到以下錯誤:

“join子句中某個表達式的類型不正確。在調用'GroupJoin'時類型推斷失敗”

有任何想法嗎? 一些說明:

1:'變量'syncNo'是一個long,就像DB(bigint)中的值一樣。 db中的值是可以為空的,所以我也嘗試過“long?” 作為變量類型

2:AccsandPurchase是我制作的自定義課程,你可能猜到了

謝謝

嘗試指定相同的連接鍵名稱,例如

join pop in dc.POPTransactions on new { Key1 = s.ID, Key2 = syncNo } equals new {Key1 = pop.AccountID, Key2 = pop.SyncNo }

來自MSDN文檔:

復合鍵的類型推斷取決於鍵中屬性的名稱以及它們出現的順序 如果源序列中的屬性不具有相同的名稱,則必須在鍵中指定新名稱。 例如,如果Orders表和OrderDetails表各自為其列使用不同的名稱,則可以通過在匿名類型中指定相同的名稱來創建復合鍵:

join...on new {Name = o.CustomerName, ID = o.CustID} equals 
   new {Name = d.CustName, ID = d.CustID }

http://msdn.microsoft.com/en-us/library/bb907099.aspx

當您比較不同類型的屬性時,通常會發生此問題。 例如將short與int或字符串與int等進行比較。名稱必須匹配,但是當您的比較已經具有相同的名稱而您無法找到問題時,請檢查它們是否也是同一類型。

from p in DbSet.AsQueryable()
join t in _dbContext.SomeEntity on new { p.Id, Type = (int)MyEnum.Something }
                            equals new { t.Id, Type = t.EntityType}

在此示例中,如果t.EntityType為short (與整數進行比較),它還會為您提供以下消息:

“join子句中某個表達式的類型不正確。在調用'GroupJoin'時類型推斷失敗”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM