LINQ to SQL Присоединяйтесь к проблемам - PullRequest
7 голосов
/ 06 апреля 2011

Я пытаюсь использовать следующую 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). Я получаю следующую ошибку:

"Тип одного извыражения в предложении соединения неверны. Не удалось определить тип при вызове «GroupJoin»

Есть идеи?Некоторые примечания:

1: переменная 'syncNo' является длинной, как и значение в БД (bigint).Значение в БД имеет значение nullable, поэтому я также попробовал "long?"как тип переменной

2: AccsandPurchase - это пользовательский класс, который я создал, как вы, вероятно, можете догадаться

Спасибо

Ответы [ 2 ]

21 голосов
/ 06 апреля 2011

Попробуйте указать одинаковые имена ключей соединения, например,

join pop in dc.POPTransactions on new { Key1 = s.ID, Key2 = syncNo } equals new {Key1 = pop.AccountID, Key2 = pop.SyncNo }
5 голосов
/ 06 апреля 2011

Из документов 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...