Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ查询获取计数和不同项?_C#_.net_Linq_Linq To Sql - Fatal编程技术网

C# 使用LINQ查询获取计数和不同项?

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

我们有以下SQL表:

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()
};