2012-04-03 15 views
2

私は14,15,18のようなProjectIdのリストを持っており、linqを使って自分のデータテーブルからそれらのアイテムを検索したいと思います。LINQでIN演算子を使用する方法

は、今私は

IEnumerable<DataRow> drProjList = from a in dtProj.AsEnumerable() 
            where a.Field<int>("ProjectId") 
             .ToString() 
             .Contains(projFilter) 
            select a; 

のようなクエリを作成しましたが、私は0の要素を取得しておりません。

linqのINオペレータのような他の方法もあります。事前に

おかげで

EDIT projFilterは14,15,18、...プロジェクトのIDを持っている純粋な文字列です。

+0

「projFilter」はどのタイプですか? – MarcinJuraszek

+0

@MarcinJuraszekそのコンマで区切られた文字列ProjectIdの –

答えて

1

私はAsEnumerable()についてはあまり知りませんが、私は他の方法でラウンドそれを行っているだろう、このような何か:

List<int> intProjFilter = new List<int>(); 

foreach(string filter in projFilter.Split(',')) 
     intProjFilter.Add(int.Parse(filter)); 

from a in dtProj 
where projFilter.Contains(a.ProjectID) 
select a; 

が、これは

+0

しかし、おそらく '.ToString()'はありません。 –

+0

私はそれがprojFilterが文字列のリストだったのでそこにあると思った。あなたは正しいかもしれませんが –

+0

こんにちは@ExitMusic、この解決策は私のために働くが、それはまた14,15,18と1,4,8を返します:( –

0

たぶん何かを助けている場合、私に教えてください

IEnumerable<DataRow> drProjList = 
         (
          from a in dtProj.AsEnumerable() 
          where projFilter.Contains(a.Field<int>("ProjectId").ToString()) 
          select a; 
         ) 

それとも、単にだけでなく、これを行うことができます:

IEnumerable<DataRow> drProjList=dtProj.AsEnumerable() 
            .Where(a=>projFilter 
              .Contains(a.Field<int>("ProjectId") 
              .ToString())); 
を、このような
+0

、これは 'string.Contains(string)の最適なオーバーロードメソッドにいくつかの無効な引数があります。 'というエラーを表示しています。 私は思います012.AllField ( "ProjectId") 'は' ToString() 'を必要とします。 –

+0

答えを更新します – Arion

+0

hi @ Arion、すばやい返信ありがとうございます。私はExitMusicのクエリの戻り値と同じものを取得しています。余分な1,4,8のProjectId? –

0

私はよく分からないので、私はあなたを助けるvb.netの希望で答えを出そうとしています。

Dim dtProj As DataTable 
    dtProj = FillProjectList() 

    Dim projIdFilter() As Integer = {14, 15, 16} 

    Dim drRow = From p In dtProj.AsEnumerable _ 
     Where projIdFilter.Contains(p.Field(Of Integer)("ProjectId")) _ 
     Select p 

ありがとう...

3

文字列の本当にここにオプションではありません "が含まれて"。 projFilterを適切な整数リストに変換する必要があります。

var projFilter2 = new HashSet<int>(projFilter.Split(',').Select(i => int.Parse(i))); 

を入力し、目的の番号が含まれているかどうかを確認してください。

IEnumerable<DataRow> drProjList = 
    from a in dtProj.AsEnumerable() 
    where projFilter2.Contains(a.Field<int>("ProjectId")) 
    select a; 
1

まず、整数のコレクションにプロジェクトフィルタを解析する必要があります。

var projectIds = projFilter.Split(',').Select(x => Convert.ToInt32(x)).ToList(); 

var drProjList = 
    from a in dtProj.AsEnumerable() 
    where projectIds.Contains(a.ProjectId) 
    select a; 
+0

oopsはタイプミスを修正しました。ToString()の代わりにToList() – Fnop

関連する問題