0

これらの行を実行すると

drpdf["meno"] = matches.Cast<Match>().Where(c => c.Groups["ID"].Value == i.ToString()).Select(c => c.Groups["meno"].Value);
drpdf["info"] = matches.Cast<Match>().Where(c => c.Groups["ID"].Value == i.ToString()).Select(c => Regex.Replace(c.Groups["zvysok"].Value, @"^,\s?", string.Empty));

代わりに、必要なDataRow値に保存されません

System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Text.RegularExpressions.Match,System.String]

戻り値を選択して読み取り可能な型にキャストする方法を教えてもらえますか?とにかくありがとう。オンドロ

4

3 に答える 3

1

LINQクエリはを使用するSelectので、IEnumerable<T>戻ってきます。LINQクエリの結果が必要で、1つの結果だけを期待している場合は、次を追加し.Single()ます。

drpdf["meno"] = matches.Cast<Match>()
                       .Where(c => c.Groups["ID"].Value == i.ToString())
                       .Select(c => c.Groups["meno"].Value)
                       .Single();

一方、クエリに複数の結果が含まれる可能性がある場合は、.First()代わりに最初の結果を取得するために使用する必要があります。ただし、その時点では、シナリオが何であり、何をキャプチャしようとしているのかによって異なります。

于 2012-08-27T14:04:18.477 に答える
0

クエリの結果は列挙可能なオブジェクトです。すでにお気づきのように、これらを呼び出しToString()ても意味のある文字列表現は得られません。表示に適した文字列を生成する必要があります。

内容をコンマ区切りのリストとして表示するだけの場合は、次のように使用できますString.Join()

var menos = matches.Cast<Match>()
                   .Where(c => c.Groups["ID"].Value == i.ToString())
                   .Select(c => c.Groups["meno"].Value);
drpdf["meno"] = String.Join(", ", menos);

それ以外の場合、単一の結果を選択する場合は、を使用Single()してその単一の文字列の結果を選択します。

于 2012-08-27T14:07:36.160 に答える
0

何かのようなもの:

matches.Cast<Match>()
       .Where(c => c.Groups["ID"].Value == i.ToString())
       .Select(c => c.Groups["meno"].Value)
       .FirstOrDefault();  // this expression will evaluate the linq 
                           // expression, so you get the string you want

注意:nullが実際にコンテキストで有効な値である場合にのみ、FirstOrDefaultまたはSingleOrDefaultを使用する必要があります。(@Daniel Hilgarthが言ったように)。

nullが有効な結果ではなく、代わりに空の文字列が必要な場合は?? String.Empty、式にaを追加します。

matches
  ...
  .FirstOrDefault() ?? String.Empty;
于 2012-08-27T14:06:43.363 に答える