public class User
{
    public int UserID {get; set;}
    public string UserName {get; set;}
    public int Points {get; set;}
}
现在有一个List<User> list = new List<User>
从数据库读取数据不断添加到list中,过程略。。现在想从集合中选出Points之和大于100的项来。例如:
ID: 5  Name: Jack  Point: 70
ID: 5  Name:Jack  Point: 40
ID为5的JackPoints之和为110,满足要求。想用linq来实现,请大家帮帮忙。最好用LINQ,其他方法也可以。谢啦!
 

解决方案 »

  1.   

    这个要group by吧?直接foreach怎么写?
      

  2.   


    void Main()
    {
     List<User> list = new List<User>
    {
      new User{ UserID=5, UserName="Jack Point", Points=70},
      new User{ UserID=5, UserName="Jack Point", Points=40},
      new User{ UserID=6, UserName="Jack Point1", Points=20},
    };
      var result=from u in list
                 group u by u.UserID into g
     where g.Sum(m=>m.Points)>100
     select g;
     
    }
    public class User
    {
    public int UserID {get; set;}
    public string UserName {get; set;}
    public int Points {get; set;}
    }
      

  3.   


    void Main()
    {
     List<User> list = new List<User>
    {
      new User{ UserID=5, UserName="Jack Point", Points=70},
      new User{ UserID=5, UserName="Jack Point", Points=40},
      new User{ UserID=6, UserName="Jack Point1", Points=20},
    };
      var result=from u in list
                 group u by u.UserID into g
     where g.Sum(m=>m.Points)>100
     from u in g
     select u;
     
     result.ToList().ForEach(u=>Console.WriteLine("{0}\t{1}\t{2}",u.UserID,u.UserName,u.Points));
     /*
     5 Jack Point 70
     5 Jack Point 40
     */
    }
    public class User
    {
    public int UserID {get; set;}
    public string UserName {get; set;}
    public int Points {get; set;}
    }
      

  4.   

    遍历LIST,在循环中判断、筛选
      

  5.   


    List<User> list = new List<User>();
    //list.Add(..
    //最好自己内部实现排序、分组的功能
    //简单实现一下,仅记录符合条件的UserID
    Hashtable idHS = new Hashtable();//存放UserID集合
    List<int> selUserIDList = new List<int>();//存放符合条件的UserID集合
    for(int i = 0; i < list.Count; i++)
    {
      User curUser = list[i];
      int curID = curUser.UserID;
      int curPoints = curUser.Points;
      if(!idHS.Keys.Contains(curID)) idHS.Add(curID,curPoints);
      else
      {
          idHS[curID] = (int)idHS[curID] + curPoints;
      }
    }
    foreach(int cID in idHS.Keys)
    {
      int temPoints = (int)idHS[cID];
      if(temPoints > 100) selUserIDList.Add(cID);
    }
    //这样,符合条件的UserID已经保存在selUserIDList中了