I get this error message:
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.
The first method has no problems using a IEnumerable<T>.Select()
?
Where is the problem with the 2nd method?
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;
}
documentsOC.Add
returnsvoid
.It doesn't make any sense (and is impossible) to write
.Select<Something, void>(...)
.What you're trying to do cannot work in the first place;
Select
is lazy and doesn't call your function until you enumerate the results.You should use a regular
foreach
loop.I suspect that
Add
returnsvoid
- is that right? If so there is no way of projecting that to aFunc<,>
- only to anAction<T>
- andSelect
wants theFunc<,>
.Select
is not the same as an indirect `foreachSelect is not a replacement for a foreach. Use this instead:
The Error seems The Return statement missing when you select an Items from the collection.
Example:
What is the return type of
ObservableCollection<Document>.Add
? Typically anAdd
method returns void. You can't use LINQSelect
to execute a procedure for all elements, only a function that returns something (else where would the return value ofSelect
come from?). Instead you can use LINQForEach
or the C# foreach loop.