我正在尝试将此LINQ方法表达式转换为等效的查询语法:
var results1 =
logins.GroupBy(loginDate => loginDate.Date)
.Select(loginDates => new
{
Date = loginDates.Key,
Count = loginDates.Select(login => login.Name).Distinct().Count()
});
首先,我采用了这种语法,它确实提供了相同的结果,但实际上并不相同。
var results2 =
from loginDate in logins
group loginDate by loginDate.Date
into loginDates
select new
{
Date = loginDates.Key,
Count = (from login in loginDates group login by login.Name).Count()
};
不同之处在于我在这里使用group by
语句,它与distinct不同(尽管它确实提供了相同的结果)。然后我尝试了这个:
var results3 =
from loginDate in logins
group loginDate by loginDate.Date
into loginDates
select new
{
Date = loginDates.Key,
Count = (from login in loginDates select login.Name).Distinct().Count()
};
但是,此代码再次使用了一些方法语法。
这是我最后一个例子,你能得到的最好的?或者是否可以使用更少的方法语法和更多的查询语法来重写查询?
logins
初始化如下:
var logins = new[]
{
new {Name = "james", Date = new DateTime(2011, 01, 01)},
new {Name = "jamie", Date = new DateTime(2011, 01, 01)},
new {Name = "alex", Date = new DateTime(2011, 01, 01)},
new {Name = "james", Date = new DateTime(2011, 1, 1)},
new {Name = "matt", Date = new DateTime(2011, 1, 2)},
new {Name = "jamie", Date = new DateTime(2011, 1, 2)},
new {Name = "alex", Date = new DateTime(2011, 1, 2)},
new {Name = "james", Date = new DateTime(2011, 1, 2)},
new {Name = "james", Date = new DateTime(2011, 1, 2)}
};
答案 0 :(得分:4)
Distinct
没有查询表格(请参阅此post了解原因)。 group by
的查询语法在语义上是等效的,如果你想在查询表单中使用它,我就会使用它。
答案 1 :(得分:1)
afaik,LINQ查询语法没有Distinct()
等价物。 Count()
,Sum()
等都不是。所以你必须结合方法/查询语法或只使用方法。