1つのクエリの結果を結合して、2番目のクエリの結果をフィルタリングしようとしています。
最初のクエリ
// get the compound centre number and languageId key
var centreKeys = unitOfWork.CentreTranslationRepository.GetAll()
.Where(w => w.Language.cuture == searchCulture || w.language_id == 1)
.GroupBy(g => g.Centre.number)
.Select(s =>
new
{
CentreNumber = s.Key,
LanguageId = s.Max(g => g.language_id)
});
これにより、次の形式で結果が返されます。
{ CentreNumber = 1589, LanguageId = 27 }
{ CentreNumber = 261, LanguageId = 1 }
{ CentreNumber = 1257, LanguageId = 1 }
{ CentreNumber = 925, LanguageId = 1 }
等
2番目のクエリ
// join onto the translated table
var centres = unitOfWork.CentreTranslationRepository.GetAll()
.Join(centreKeys,
centreTranslation => new { centreTranslation.Centre.number, centreTranslation.language_id },
centreKey => new { centreKey.CentreNumber, centreKey.LanguageId },
(centreTranslation, centreKey) =>
new Centre
{
CentreNumber = centreTranslation.Centre.number,
name = centreTranslation.Centre.name
// etc
});
単一のキーで結合を実行しても問題はありませんが、上記のように、匿名の複合キーを使用して結合しようとしています。
これは私がエラーを受け取るときです:
Error 1 The type arguments for method 'System.Linq.Enumerable.Join<TOuter,TInner,TKey,TResult>(System.Collections.Generic.IEnumerable<TOuter>, System.Collections.Generic.IEnumerable<TInner>, System.Func<TOuter,TKey>, System.Func<TInner,TKey>, System.Func<TOuter,TInner,TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly. C:\Development\SVN\Projects\CentreDirectoryService\CentreDirectoryService\Services\DomainService.cs 32 65 CentreDirectoryService
2番目のクエリで何が間違っていますか?