7

次のエラー メッセージが表示されます。

The type arguments for method 'System.Linq.Enumerable.Select<TSource,TResult>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,int,TResult>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

最初の方法では、IEnumerable<T>.Select()?を使用しても問題はありません。2番目の方法の問題はどこにありますか?

private void GetPupilsForSchoolclass()
{
   ObservableCollection<PupilViewModel> pupilsOC = new ObservableCollection<PupilViewModel>
   (                            _adminRepo.GetPupilsBySchoolclassId(_selectedSchoolclass.SchoolclassId).Select(p => new       PupilViewModel(p, _adminRepo))
   );
   SelectedSchoolclass.PupilListViewModel = pupilsOC;
}

private void GetDocumentsForPupil()
{
                ObservableCollection<Document> documentsOC = new ObservableCollection<Document>();
                IEnumerable<Document> documents = _docRepo.GetDocumentsByPupilId(_selectedPupil.Id);
                documents.Select(doc => documentsOC.Add(doc));
                SelectedPupil.Documents.DocumentList = documentsOC;
}
4

5 に答える 5

15

documentsOC.Add戻りますvoid
と書くのは意味がありません (そして不可能です) .Select<Something, void>(...)

あなたがやろうとしていることは、そもそもうまくいきません。Select怠惰で、結果を列挙するまで関数を呼び出しません。

通常のforeachループを使用する必要があります。

于 2011-01-07T19:55:27.473 に答える
4

コレクションからアイテムを選択すると、エラーは The Return ステートメントが見つからないようです。

例:

collection = nonLabors.Select(item =>
                {
                    item.Travel_Miles = item.Travel_Miles_Original != null ? decimal.Parse(item.Travel_Miles_Original) : 0;
                    return item;
                }).ToList();
于 2013-05-24T12:44:06.737 に答える
2

私はそれAdd戻ってくると思いますvoid- そうですか?もしそうなら、それを a に投影する方法はありませんFunc<,>- だけにAction<T>- そして をSelect望んでいFunc<,>ます。

Select間接的な `foreach と同じではありません

于 2011-01-07T19:56:45.240 に答える
1

の戻り値の型はObservableCollection<Document>.Add何ですか? 通常、Addメソッドは void を返します。LINQSelectを使用してすべての要素に対してプロシージャを実行することはできず、何かを返す関数のみを実行できます (それ以外の場合、戻り値はSelectどこから来るのでしょうか?)。ForEach代わりに、LINQ または C# foreach ループを使用できます。

于 2011-01-07T19:55:57.830 に答える
0

Select はforeach の代わりにはなりません。代わりにこれを使用してください:

ObservableCollection<Document> documentsOC = new ObservableCollection<Document>();
IEnumerable<Document> documents = _docRepo.GetDocumentsByPupilId(_selectedPupil.Id);
foreach(var doc in documents)
{
    documentsOC.Add(doc);
}
SelectedPupil.Documents.DocumentList = documentsOC;
于 2011-01-07T19:58:21.670 に答える