2016-07-13 8 views
0

私は複数の整数値(カンマ区切り)を持つ列を持っているリストを持っています。linqでカンマで区切られた複数の整数値を持つ列を照合するにはどうすればよいですか?

eg: 
------------------------ 
| Program | Module  | 
------------------------ 
| I  | 1,2,3  | 
------------------------ 
| II  | 2, 3  | 
------------------------ 
| III  | 1,3   | 
------------------------ 

、supppose、私はモジュールが2

int sid = 2; 
IEnumerable<int> ids = Program.All.FindAll(item => 
    sid.contains(
     item.Module.Split(',').Select(s => (int)s) 
    ) 
) 

コンパイルエラーになっているプログラムを選択したい場合:いずれかplzは私を助けることができる

cannot convert string to int

を。

おかげ

答えて

1

あなたは一度だけ文字列にあなたのSIDを変換し、文字列

var sidAsStr = sid.ToString(); 
var result = Program.All.FindAll(item => item.Module.Split(',') 
    .Any(s => s.Trim() == sidAsStr)); 

のようにそれを検索することができます多分それはそれは多くの解析作業を避けるため

0

は、そのプログラムを考慮し、より生産的なソリューションです。 IDはローマ数字であるため、intで取得するためのカスタム変換を提供する必要があります。IEnumerablestring

ローマン番号変換用
string sid = "2"; 
IEnumerable<string> ProgramIds = 
    Program 
    .Where(prg => 
    (("#") + prg.Module + "#").Contains("#"+sid+"#") 
    || 
    (("#") + prg.Module + "#").Contains("#"+sid+",") 
    || 
    (("#") + prg.Module + "#").Contains(","+sid+",") 
    ) 
).Select(prg => prg.Program) 

...彼らは両方のすべての良いソリューションですこれらのリンクを試してみてください

https://stackoverflow.com/a/26667855/3762855

https://stackoverflow.com/a/27976977/3762855

関連する問題