4

C# linq to entity を使用して 2 つのテーブルを結合しようとしています。

1 つのテーブルにはクライアントがあり、もう 1 つのテーブルにはライセンスがあります。テーブルは Client_ID と ClientLicence_ClientID によって結合されます。何らかの理由で (それらは私のテーブルではありません)、Client_ID は int であり、ClientLicence_ClientID は文字列です。

私が持っているコードは次のとおりです。

var licences = (from client in entities.Clients
                            join licence in entities.ClientLicences
                            on new { clientId = SqlFunctions.StringConvert((double)client.Client_ID) } equals
                            new { licence.ClientLicence_ClientID }
                            into clientGroup
                            where (filter.clientId == 0 || client.Client_ID == filter.clientId)
                            select licence);

これをコンパイルしようとすると、エラーが発生します: 結合句の式の 1 つの型が正しくありません。'GroupJoin' の呼び出しで型の推定に失敗しました。

whereステートメントをコメントアウトすると、機能します(結果をフィルタリングしなくても)。

フィルター変数は、関数に渡されるクラスです。プロパティは 1 つだけです: int clientId.

4

1 に答える 1

6

あなたの結合を見てください:

join licence in entities.ClientLicences on
new { clientId = SqlFunctions.StringConvert((double)client.Client_ID) }
equals
new { licence.ClientLicence_ClientID }
into clientGroup

キーの種類は次のとおりです。

  • というプロパティを持つ匿名型clientId
  • というプロパティを持つ匿名型ClientLicence_ClientID

これら 2 つの匿名型が等しいかどうかを比較することはできません。実際、ここでは匿名型はまったく必要ないと思います。私はこれがうまくいくと思います:

join licence in entities.ClientLicences on
SqlFunctions.StringConvert((double)client.Client_ID)
equals
licence.ClientLicence_ClientID
into clientGroup

(明らかに、すべての新しい行が必要なわけではありません。わかりやすくするために、さまざまなビットを分離しようとしていました。)

句がなくても機能すると主張しますwhereが、結合が問題であることを考えると、それは非常に驚くべきことです。

于 2012-05-19T15:54:01.683 に答える