2016-06-21 1 views
0

次の意味は?連合または連結方式の中「ユニオンまたはコンカットのタイプが異なる順序で割り当てられている」とはどういう意味ですか?

タイプは、メンバーは、私は2つのサブクラスを連結し、リストでそれらを並べ替えしようとしている

異なる順序で割り当てられたが、私はこのエラーを取得しています。私のコードはこのように見えます。私は何よりもエラーの説明をしたいと思いますが、これに対する解決策も高く評価されます。

public List<InterfaceItem> GetTransactions(string id) 
    { 
     DataClasses1DataContext context = new DataClasses1DataContext(); 

     var tollQuery = from t in context.Tolls 
         where t.account_id.Equals(id) 
         select new TollTest { Date = t.status_time, Amount = t.fee, Plate = t.plate_id }; 
     var paymentQuery = from p in context.Payments 
          where p.account_id.Equals(id) 
          select new PaymentTest { Date = p.status_time, Amount = p.payment1, PaymentMethod = p.credit_type }; 

     IQueryable<InterfaceItem> toll = tollQuery; 
     IQueryable<InterfaceItem> payment = paymentQuery; 

     var all = (toll.Concat(payment)).ToList(); 
     return all; 
    } 
+0

ここでは推測していますが、通常は、選択したフィールドがタイプによって一致する必要があります(論理的にも同じです)。私は(再び)plate_idとcredit_typeは異なるタイプであると推測していますか? PaymentMethod = 0を(一時的に)変更するとどうなりますか?その場合は機能しますか? –

+0

plate_idとcredit_typeは両方とも文字列です。 TollTestとPaymentTestは、Date(DateTime)とAmount(10進)を継承するInterfaceItemのサブクラスです。リストをサブクラスとして返すとうまくいきますが、2つを結合することについてはわかりません。私はtollQuery.Cast ()を試しました。Union(paymentQuery.Cast ())。OrderBy(x => x.Date).ToList();それは私に同じエラーを与えるだけです – Max

+0

InterfaceItemはPlateとPaymentMethodフィールドを持っていますか?その場合は、特定のタイプではなくそのタイプを選択またはキャストしてみてください。または、両方のフィールドが子オブジェクトに存在する場合は、新しいTollTest {Date = t.status_time、Amount = t.fee、Plate = t.plate_id、PaymentMethod = null}のように明示的に選択してください。 – Nikki9696

答えて

0

Nikki9696からのインスピレーションを得て、わかりました。私はInterfaceItemのサブクラスとしてTollTestとPaymentTestを使っていました。私はこのエラーが発生した場合は、基本クラス変数は、そのため

  var tollQuery = from t in context.Tolls 
         where t.account_id.Equals(id) 
         select new TollTest { Date = t.status_time, Amount = t.fee}; 
     var paymentQuery = from p in context.Payments 
          where p.account_id.Equals(id) 
          select new PaymentTest { Date = p.status_time, Amount = p.payment1}; 

、すなわち使用した場合にのみ成功したサブクラスを使用することができました

 var tollQuery = from t in context.Tolls 
         where t.account_id.Equals(id) 
         select new InterfaceItem { Date = t.status_time, Amount = t.fee, PaymentMethod = null, Plate = t.plate_id }; 
     var paymentQuery = from p in context.Payments 
          where p.account_id.Equals(id) 
          select new InterfaceItem { Date = p.status_time, Amount = p.payment1, PaymentMethod = p.credit_type, Plate = null }; 

:最後に、私は、サブクラスを削除し、代わりに次のでしたその型だけでなく、同じ変数名を持っていることを確認する必要があります。

関連する問題