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。不能使用LINQSelect
对所有元素执行一个过程,只能使用一个返回某些内容的函数(否则Select
的返回值从哪里来?)。相反,您可以使用LINQForEach
或C#ForEach循环。我怀疑Add
返回void
-对吗?如果是这样,则无法将其投影到Func
-仅投影到操作
-并且选择需要Func
Select
与间接的`foreachSelect不是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。