C# 使用LINQ查询获取计数和不同项?
我们有以下SQL表:C# 使用LINQ查询获取计数和不同项?,c#,.net,linq,linq-to-sql,C#,.net,Linq,Linq To Sql,我们有以下SQL表: Tag ---------------------------------------- ID | tagName | UserID ---------------------------------------- 01 | c++ | 03 02 | c# | 03 03 | asp.net | 04 04 | programming | 05 05 | vb
Tag
----------------------------------------
ID | tagName | UserID
----------------------------------------
01 | c++ | 03
02 | c# | 03
03 | asp.net | 04
04 | programming | 05
05 | vb | 07
06 | php | 07
07 | java | 12
08 | class | 12
TagRelation
----------------------------------------
ID | tagID | topicID
----------------------------------------
01 | 01 | 22
02 | 02 | 22
03 | 08 | 22
04 | 06 | 12
05 | 02 | 12
06 | 04 | 104
07 | 02 | 104
08 | 01 | 104
09 | 02 | 17
10 | 05 | 17
现在,我想通过LINQ查询获得每个用户在TagRelation
表中重复每个标记的次数。
我使用了以下查询,但它没有编译,它有一些错误
DataClassesDataContext dbc = new DataClassesDataContext();
var query = from q in dbc.Tags
where q.UserID == this.UserID
from c in dbc.TagRelations
where c.tagID == q.id
select new
{
tagName = q.name.Distinct(),
repeatNumber = c.Count()
};
我怎么做?谢谢
编辑:事实上,我期望得到以下结果:
result (if UserID==3)
-------------------------
tagName | repeatNumber
-------------------------
c++ | 02
c# | 01
您可以使用group by来实现所需的结果您可以发布一个示例代码,我不熟悉
group by
您可以使用group by来实现所需的结果您可以发布一个示例代码,我不熟悉group by
group by
仅凭r
不会给出所需的结果,是吗?@abatishchev,我正在按t
进行分组,它将使用LINQ给对象提供所需的结果,我希望它对LINQ给SQL也会这样做。我的测试显示new[]{new Tag{TagName=“c#”},new Tag{TagName=“c#”}。GroupBy(t=>t)
按引用分组,即每个标记在单独的标记中。@abatishchev,是的,在LINQ to对象中,它使用默认的相等比较器。我假设通过覆盖Equals()
(和GetHashCode()
)或每个标记名只有一个实例,可以处理相等性,在这种情况下,引用相等性工作正常。groupby
仅通过r
不会给出期望的结果,是吗?@abatishchev,我正在按t
进行分组,它将使用LINQ对对象给出所需的结果,我希望它对LINQ to SQL也会这样做。我的测试显示new[]{new Tag{TagName=“c#”},new Tag{TagName=“c#”}.GroupBy(t=>t)按引用分组,即每个标记在单独的标记中。@abatishchev,是的,在LINQ to Objects中,它使用默认的相等比较器。我假设通过重写Equals()
(和GetHashCode()
)或者通过每个标记名只有一个实例来处理相等,在这种情况下,引用相等可以正常工作。
var q = ...
group r by r.TagName into g;
select new
{
TagName = g.Key,
Count = g.Count()
};
foreach (var i in q)
{
string tagName = i.TagName;
int count = i.Count;
}
from t in dbc.Tags
where t.UserID == this.UserID
join r in dbc.TagRelations on t.id equals r.tagID
group r by t into g
select new
{
tagName = g.Key.name,
repeatNumber = g.Count()
};