2014-05-23 4 views
0
class user  
{ 
    public string userID { get; set; } 
    public string groupID { get; set; } 
    public int individualCredit { get; set; } 
    public int groupCredit { get; set; } 
} 

나는 다음과 같은 일을 할 필요가 있고 내가 지금까지 시도 것을주는거야이그룹 그룹

List<user> listUsers = new List<user>(); 

같은 목록을 가지고에 개체 및 할당 값의 목록입니다.

동일한 그룹으로 사용자를 그룹화하려는 경우 groupID입니다.

그룹의 각 구성원의 individualcredit을 추가하고 그룹 구성원의 수로 나눠서 groupCredit을 계산하십시오.

마지막으로 각 사용자에게 groupCredit을 할당하고 싶습니다. 회원 수는 3 ~ 5 인 그룹이 있습니다.

누구든지 나를 도와 줄 수 있습니까? 적어도 나에게 샘플 풀린 질문을 줘? 나는 수색했다. 그러나 나는 이것과 아주 어울리는 것을 발견하지 못했다.

이 내 LINQ입니다 지금까지

var groups = lstUsers.GroupBy(x => x.groupID).Select(g => new {ID=g.Key,count=g.Count() }); 
여기

내가 뭘 이해하지 않는 것은 (그것은 모든 그룹 구성원 마크를 추가하고 그룹 구성원 수로 나눈 값입니다) 그룹 마크를 취득하고 그룹의 각 구성원에게 그룹 표시를 지정합니다.

답변

0

모든 LINQ 식 하나를 쿼리 한 다음 모든 것을 루프로 설정합니다. 클래스를 참조하기 때문에

var credits = lstUsers.GroupBy(x => x.groupID) 
     .Select(g => {ID = g.Key, Credit = g.Sum(x => x.individualCredit)/g.Count()}); 

foreach (var user in lstUsers) 
{ 
    user.groupCredit = credits.Single(x => x.ID == user.groupID).Credit; 
} 
+0

에 의해 relookup 필요가 없습니다; 세트; } 및 계산하려는 경우 groupPercentage = (individuaMark/groupMark) * 100; 어떻게 수행하나요? 개별 표시에 액세스하는 방법을 보여줄 수 있다면 충분합니다. 감사합니다 – Sahil

1
var groups = listUsers.GroupBy(x => x.groupID) 
       .Select(g => new { ID = g.Key, AverageCredit = g.Average(u => u.individualCredit) }); 

foreach (var user in listUsers) 
    user.groupCredit = groups.First(u => u.ID == user.groupID).AverageCredit; 
+0

내 클래스에 이와 같은 변수가 있다면 public int groupPercentage {get; 세트; } 및 계산하려는 경우 groupPercentage = (individuaMark/groupMark) * 100; 어떻게 그럴 수 있습니까? 개별 표시에 액세스하는 방법을 보여줄 수 있다면 충분합니다. 감사합니다 – Sahil

+0

당신은 foreach 루프에 추가 할 수 있습니다. 사용자 속성에 액세스 할 수 있습니다. 나는 당신이 프로그래밍에 초보자가 될 수 있음을 안다. 조언 한 마디 : 물건을 시험해보십시오. 당신이 생각하기에 그것이 일할 수있는 방법으로 그것을하고 그것을 줄 수 있습니다. 디버거를 사용하고 코드를 단계별로 실행하고 관찰자를 사용하여 변수가 어떻게 보이는지 확인하십시오. 이 과제에서 무엇이 옳고 무엇이 잘못되었는지는 분명합니다. 몇 번 잘못 이해할 수도 있지만, 가장 확실하게 배울 것입니다. – Edin

0

당신은 익명의 유형이 추가 할 수 있습니다. 당신은 내가 내 수업 공공 INT groupPercentage {얻을이 같은 변수가있을 경우 키

var listUsers = new List<user>(); 
var groups = listUsers.GroupBy(x => x.groupID).Select(g => new { users = g, groupCredit = g.Average(u => u.individualCredit) }); 
foreach (var group in groups) 
{ 
    foreach (var member in group.users) 
    { 
     // Avg is a decimal have to cast back to int for class 
     member.groupCredit = (int)group.groupCredit; 
    } 
}