我有一个结果集,我从执行我正在使用的存储过程中返回。以下是结果集的示例:
var staff = new Staff[]
{
new Staff{Code = 5, Name = "Sam", Team = "AB1"},
new Staff{Code = 6, Name = "Dave", Team="RAB"},
new Staff{Code = 6, Name = "Dave", Team="ABC"},
};
根据我正在处理的数据集,工作人员可以在多个团队中运作。
我想要做的是将它们分组,以便显示如下结果:
Value ChildValues
Dave [RAB, ABC]
Sam [AB1]
我怎样才能做到这一点?我通过复制主列表尝试了以下内容,但我知道以下内容不正确:
var query = staff.GroupJoin(staff, s => s.Code,
s => s.Code, (s, result) => new StaffResult(s.Name, result));
我很欣赏有关上述内容的协助。
答案 0 :(得分:1)
您应该使用GroupBy
方法来实现此目标。
var grouped = staff.GroupBy(x=>x.Name, x=>x.Team);
该语句按名称对数据进行分组,每个分组将保留团队。
您可以在https://msdn.microsoft.com/en-us/library/bb545971.aspx?f=255&MSPPError=-2147217396找到更多信息。
希望它有所帮助。
答案 1 :(得分:1)
尝试以下查询:
var staff = new Staff[]
{
new Staff{Code = 5, Name = "Sam", Team = "AB1"},
new Staff{Code = 6, Name = "Dave", Team="RAB"},
new Staff{Code = 6, Name = "Dave", Team="ABC"},
};
var grouped = staff.GroupBy(m => m.Name)
.Select(p => new { Value = p.Key, ChildVlues = p.Select(m => m.Team) })
.ToList();
这里我按Name
分组。比我创建新的匿名类型并将Key
组(代表名称)添加到Value
。另外,我将p.Select(m => m.Team)
添加到ChildValues
,因为您需要收集名称。
答案 2 :(得分:0)
查看Linq中的GroupBy语句:
https://msdn.microsoft.com/en-us/library/bb534304(v=vs.110).aspx
看起来像
public func mapView(mapView: MKMapView, viewForAnnotation annotation: MKAnnotation) -> MKAnnotationView? {
if (annotation is MKUserLocation) {
return nil
}
var annotationView: MKAnnotationView?
// personalize annotationView
return annotationView
}
这会为您提供一个分组,如果需要,您可以通过foreach或其他linq查询进行访问