110,538
社区成员
发帖
与我相关
我的任务
分享
static void Main(string[] args)
{
var list = GetData();
var query =
from u in list
where u.IsNormal == "1"
group u by u.UserId into g
orderby g.Key
from u2 in g
where u2.Date == g.Min(u3 => u3.Date)
select u2;
foreach (var u in query)
Console.WriteLine("{0}, {1}, {2}", u.UserId, u.Date, u.Rank);
Console.Read();
}
static IEnumerable<User> GetData()
{
yield return new User { UserId = "100", Rank = "10", Date = "20101012", IsNormal = "1" };
yield return new User { UserId = "100", Rank = "20", Date = "20101009", IsNormal = "1" };
yield return new User { UserId = "200", Rank = "11", Date = "20101011", IsNormal = "1" };
yield return new User { UserId = "100", Rank = "18", Date = "20101008", IsNormal = "1" };
yield return new User { UserId = "300", Rank = "2", Date = "20101010", IsNormal = "1" };
yield return new User { UserId = "300", Rank = "15", Date = "20101013", IsNormal = "1" };
yield return new User { UserId = "300", Rank = "16", Date = "20101002", IsNormal = "0" };
}
void Main()
{
var list = GetData();
var q = from u in list
where u.IsNormal == "1"
group u by u.UserId into g
orderby g.Key select g;
//你看看这样写 是不是好理解一点
var w = from u2 in q
from u3 in u2
where u3.Date == u2.Min(u =>u.Date)
select u3;
w.ToList().ForEach(u=>Console.WriteLine(u.UserId));
/*
100
200
300
*/
}
var w = from u2 in q where u2.Date == q.Min(u3 => u3.Date) select u2;
//u2 是单个组,q是多个组,u3是单个组,u3里头(key+user集合),u3相当于前面的g,
大概看了一下。
var query = from u in list
where u.IsNormal == "1"
group u by u.UserId into g//这里g是IGrouping类型的
orderby g.Key
from u2 in g
where u2.Date == g.Min(u3 => u3.Date)
select u2;
var q = from u in list
where u.IsNormal == "1"
group u by u.UserId into g
orderby g.Key
select g;//这里g也是IGrouping类型的
但是from...select返回的就是g类型的IOrderedEnumerable<IGrouping<string,User>>类型了。
相当于你需要再次from才能达到效果,例如你的修改为
var w = from g in q
from u2 in g
where u2.Date == g.Min(u3 => u3.Date)
select u2;
才行。
不太懂Linq。你继续等Garfield(Tim)吧。
//原来的
1)from u2 in g where u2.Date == g.Min(u3 => u3.Date)
//你的
2)from u2 in q where u2.Date == q.Min(u3 => u3.Date)
//不一样吧 1中的g是 单个组(key+User集合) 2中的 q 是g的集合(多个组)
var q = from u in list
where u.IsNormal == "1"
group u by u.UserId into g
orderby g.Key select g;
//这里的g 是指单个组,一个组里面包含了一个key和一个User集合 当然能
//g.Min(u3 => u3.Date)
// q是一个select出组成g的集合