0

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番目のクエリで何が間違っていますか?

4

1 に答える 1

6

これ:

new { centreTranslation.Centre.number, centreTranslation.language_id }

この:

new { centreKey.CentreNumber, centreKey.LanguageId }

さまざまな匿名タイプのオブジェクトを定義します。匿名タイプを統合するには、メンバーが同じ名前、同じタイプ、同じ順序である必要があります。メンバー名を指定しない場合、コンパイラーは指定された式を使用するため、最初の式はメンバーnumberと。language_idを含む型を作成し、2番目の式はメンバーCentreNumberと。を含む型を作成しLanguageIdます。

最初のものをに変更してみてください

new {
        CentreNumber = centreTranslation.Centre.number, 
        LanguageId  = centreTranslation.language_id 
    }

(そして必要なダウンストリームの変更を行います)。

于 2013-02-06T12:03:30.357 に答える