C# 为什么IEnumerable<;T>;。Select()适用于2种情况中的1种?无法从用法推断

C# 为什么IEnumerable<;T>;。Select()适用于2种情况中的1种?无法从用法推断,c#,select,ienumerable,inferred-type,C#,Select,Ienumerable,Inferred Type,我收到此错误消息: 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 a

我收到此错误消息:

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.
无法从用法推断方法“System.Linq.Enumerable.Select(System.Collections.Generic.IEnumerable,System.Func)”的类型参数。尝试显式指定类型参数。
第一个方法在使用
IEnumerable.Select()时没有问题?
第二种方法的问题在哪里

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;
}
private void GetPupilsForSchoolclass()
{
ObservableCollection pupilsOC=新的ObservableCollection
(_adminRepo.GetPupilsBySchoolclassId(_selectedSchoolclass.SchoolclassId).Select(p=>new-PupilViewModel(p,_adminRepo))
);
SelectedSchoolclass.PupilListViewModel=pupilsOC;
}
私有void GetDocumentsForPupil()
{
ObservableCollection documentsOC=新的ObservableCollection();
IEnumerable documents=\u docRepo.GetDocumentsByPupilId(\u selectedstudio.Id);
documents.Select(doc=>documentsOC.Add(doc));
SelectedStudior.Documents.DocumentList=documentsOC;
}

documentsOC.Add
返回
void

没有任何意义(也不可能)。选择(…)

你想做的事情一开始是行不通的
Select
是惰性的,在枚举结果之前不会调用函数


您应该使用常规的
foreach
循环。

什么是
可观察收集的返回类型。添加
?通常,
Add
方法返回void。不能使用LINQ
Select
对所有元素执行一个过程,只能使用一个返回某些内容的函数(否则
Select
的返回值从哪里来?)。相反,您可以使用LINQ
ForEach
或C#ForEach循环。

我怀疑
Add
返回
void
-对吗?如果是这样,则无法将其投影到
Func
-仅投影到
操作
-并且
选择
需要
Func

Select
与间接的`foreach

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;
observetecollection documentsOC=新的observetecollection();
IEnumerable documents=\u docRepo.GetDocumentsByPupilId(\u selectedstudio.Id);
foreach(文档中的var文档)
{
文件SOC.Add(doc);
}
SelectedStudior.Documents.DocumentList=documentsOC;

从集合中选择项目时,返回语句似乎丢失

例如:

collection = nonLabors.Select(item =>
                {
                    item.Travel_Miles = item.Travel_Miles_Original != null ? decimal.Parse(item.Travel_Miles_Original) : 0;
                    return item;
                }).ToList();

地狱。。。不到一分钟,一片风暴般的答案就来到了市中心:P啊,是的,太关注viewmodel了,但是对于一个OCollection=>ObservableCollection documentsOC=新的ObservableCollection(_docRepo.GetDocumentsByPupilId(_selectedStudio.Id)),一个IEnumerable就足够了;如果你只是想让doc把它放在某个地方,这里不需要大的逻辑/计算,我会用foreach。