2016-06-14 4 views
2

FIDはFIDです.FIDはテーブル'tblRe 'にあり、dbは文字列で、他のテーブルの列はMIDです.. MIDはテーブル'tblVeh'にあります。 type in db is int両方の値は同じですが、名前は異なります。私はキーが異なる持っているとき、参加するのは難しいだろう値は同じですがlinqを使用した名前は異なります

new{MID=veh .MID} equals new {MID=tblRe .FID} 

エラー

The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join'. 

すべてのソリューション

+0

単純に 'int'を' string'と比較することはできません。どちらか一方を他方のタイプに変換する必要があります。 –

+0

私はどのように変換する? –

+0

通常は 'veh.MID.ToString()'と言いますが、これがこの式で可能かどうかはわかりません。 –

答えて

1

これを試してみてください私は調整しようとするが、これは誤り

   string data = "["; 
       var re = (from veh in DB.tblVeh 
          join regh in DB.tblRe on 
          new{MID=veh .MID} equals new {MID=tblRe .FID} 
          where !(veh .VName == "") 
          group veh by veh .VName into g 
          select new 
          { 
           Name = g.Key, 
           cnt = g.Select(t => t.Name).Count() 
          }).ToList(); 


        data += re.ToList().Select(x => "['" + x.Name + "'," + x.cnt + "]") 
        .Aggregate((a, b) => a + "," + b); 

        data += "]"; 

を示しタイプ。 linq2sqlは、クエリをSQL文に変換して実行できる必要があります。 私は最善の解決策は、データベースからintrestの行をフェッチし、次に結合を行うことだと思います。この方法では、SQLに変換する必要がないので、どのコードでも使用できます。

 //Get the list of items from tblVeh 
     var listOfVehs = 
      (from veh in DB.tblVeh 
      where !(veh.VName == "") 
      select veh).ToList(); 
     //Get all MID from the vehs and convert to string. 
     var vehMIDs = listOfVehs.Select(x => x.MID.ToString()).ToList(); 

     //Get all items from tblRe that matches. 
     var listOfRes = (from re in DB.tblRe 
         where vehMIDs.Contains(re.FID) 
         select re).ToList(); 

     //Do a in code join 
     var re = (
      from veh in listOfVehs 
      join regh in listOfRes on veh.MID.ToString() equals regh.FID 
      group veh by veh.VName into g 
      select new 
      { 
       Name = g.Key, 
       cnt = g.Select(t => t.Name).Count() 
      }).ToList(); 
+0

これはエラーを表示します;;コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。 –

+0

そして内部の例外は何を言いますか? – fhogberg

+0

このエラーはcatchで発生します。コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。どこで私は内部の例外が見えますか? –

0

結合を実行するときは、キーの種類が一致していることを確認する必要があります。あなたは単一のプロパティに参加しているので、匿名オブジェクトは必要ありませんが、型は一致しなければなりません。文字列を結合して、プロパティを文字列に変換するほうが適切です。

var query = 
    from v in db.tblVeh 
    join r in db.tblRe on Convert.ToString(v.MID) equals r.FID 
    where v.VName != "" 
    group 1 by v.VName into g 
    select $"['{g.Key}',{g.Count()}]"; 
var data = $"[{String.Join(",", query.AsEnumerable())}]"; 
関連する問題