2012-02-01 3 views
2

キャストせずにDataViewを照会することはできません。メソッドIsPresentの2行のコードはLINQ - Specified cast is not valid with dataview useから取得され、1人のコメント作成者を除いてすべてのユーザーに機能するようです。私はLINQ名前空間を "使用"しているので、私の問題は何ですか?LINQ on DataView

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // works 
      DataView o = new DataView(); 
      var p = from x in o.Cast<DataRowView>() where x.Row.Field<bool>("xxx") select x.Row; 
     } 

     public static bool IsPresent(DataView dvDataTag, string colName) 
     { 
      // does not work 
      int count = dvDataTag.Count(drv => string.Equals("1", drv[colName].ToString())); 
      return dvDataTag.Any(drv => string.Equals("1", drv[colName].ToString())); 
     } 

    } 
} 

エラー2「System.Data.DataView」がある(見つけることができる「任意」とない拡張メソッド「任意」タイプ「System.Data.DataView」の最初の引数を受け入れるための定義が含まれていませんあなたがusingディレクティブまたはアセンブリ参照が不足している)A:?\のTEMP \ ConsoleApplication1 \ ConsoleApplication1 \ Program.csをConsoleApplication1 20 20

答えて

2

は、次のような主な方法で行ったように、テーブルをキャストしてみてください。

  int count = dvDataTag.OfType<DataRowView>().Count(drv => string.Equals("1", drv[colName].ToString())); 
     return dvDataTag.OfType<DataRowView>().Any(drv => string.Equals("1", drv[colName].ToString())); 

私はまた、あなたのメインメソッドのように.Cast<DataRowView>()を試しました。コンパイル時にも。

+0

サイドコメントとして、コードに.OfType ()を追加しました。私はそれが実際のデータでどのように振る舞うか分かりません。 – eppdog

+0

ありがとうございますが、他にはキャストする必要はありませんので、なぜキャストする必要があるのだろうかと思います。私は何かを欠いているに違いない。 – AMissico

+0

他にもキャストは必要ですが暗黙的に行う必要があります。私は肯定的ではありませんが、この場合にキャストする必要性は、データの損失を避けるために配置されたセーフティネットであると私は思っています(これは、DataRowView drvのdvDataTag select drvにあります).Any() " – Samuel

関連する問題