2011-12-13 6 views
1

私はLINQを新しくしましたが、バットから厳しいものに取り組もうとしています。私は私が持っているコードは、EXIDは、内の文字列変数で、以下のようである...C#LINQ toデータセットIN節には、グループ、分が含まれます

DataTable dt = ds.Tables["myTable"]; 

var query = 
    from g in dt.AsEnumerable() 
    where g.Field<string>("exID") == exID 
    && smIDs.Contains(g.Field<string>("smID")) 
    group g by g.Field<string>("smID") into rowGroup 
    select new 
    { 
     smID = rowGroup.Key, 
     minEntID = rowGroup.Min(g => g.Field<int>("entID")) 
    }; 
これまで...次のクエリをデータセットとエミュレートするためにLINQを行うに

SELECT smID, MIN(entID) FROM table 
WHERE exID = :exID 
AND smID IN (1,2,3,4,5,6,7,8, etc) 
GROUP BY smID 

をしようとしていますメソッドとsmIDsは、メソッドの前に作成された文字列のリストです。私は試してみて、私の結果を確認するには、次のコードを作成し、それは私が私が間違っているのかを把握することができませんでした

   if (query.Count() > 0) 
      { 
       foreach (var item in query) 
       { 
        string s = item.smID; 
        int i = (int)item.minEntID; 
       } 
      } 

... query.Countで「System.InvalidCastExceptionの」エラーがスローされます。任意のポインタが最も高く評価されるだろう

at System.Data.DataRowExtensions.UnboxT`1.ValueField(Object value) 
    at System.Data.DataRowExtensions.Field[T](DataRow row, String columnName) 

VSポイントへ...

minEntID = rowGroup.Min(g => g.Field<int>("entID")) 

これは、スタックトレースの最初の2行です...。ありがとう。

+2

最初の '&& 'の代わりに' where'を書いていましたか? –

+0

また、g.Field ( "smID")... 'によって' ... group g 'と書くこともできます。 –

+0

ええ、最初の&&はごめんなさい – John

答えて

1

例外とスタックトレースから判断すると、あなたはあなたのクエリでendIDフィールドに指定しているタイプは、そのためのデータ型と一致しませんDataTableの列。これらは一致する必要があります。フィールドメソッドを使用して値を別の型にキャストすることはできません。

+0

あなたは正しいですか? "code" minEntID = rowGroup.Min(g => g.Field ( "entID")) を 'コード'に変更しましたminEntID = rowGroup.Min(g => Utilities.ConvertFieldtoInt(g.Field ( "entID" )))ヘルパーメソッドは、オブジェクトをintに変換します。ご協力いただきありがとうございます。新しいことで、私はLINQに焦点を合わせすぎて、ボックスとは無関係のエラーがないかどうかを調べました。 – John

0

が、私はこのコードを考え出すLinqerを使用:

from t in db.Table // your C# table/collection here, of course 
where t.ExId == stackoverflow.ExId 
    && (new int[] {1, 2, 3 }).Contains(t.SmId) 
group t by new { t.SmId } into g 
select new { 
    SmId = g.Key.SmId, 
    minEntID = g.Min(p => p.EntId) 
} 
関連する問題