【问题标题】:help with linq query帮助 linq 查询
【发布时间】:2010-07-07 08:26:55
【问题描述】:

我有桌子

id pagenane 用户名

我想要这个 sql 查询

select pagename, count(*) as num from pagestat where username='name' group by pagename

我如何通过 linq 做到这一点?

【问题讨论】:

    标签: c# linq linq-to-sql entity-framework


    【解决方案1】:

    好吧,试试这个:

    var query = from row in context.pageStat
                where row.UserName == "name"
                group row by row.PageName into g
                select new { PageName = g.Key, Count = g.Count() };
    

    【讨论】:

    • 如何从函数返回这个值?类似于 return query.ToList();但这是匿名类型
    • @kusanagi:如果您使用的是 .NET 4,您可以使用元组;否则,您可以使用页面名称创建自己的命名类型并将其计为属性...基本上是匿名类型的命名版本。
    • 请注意,row.UserName == "name" 将区分大小写。也许不是您想要的用户名,并且(取决于数据库排序规则)也许不是原始 SQL 查询所做的。使用row.UserName.Equals("name", StringComparison.OrdinalIgnoreCase) 进行不敏感的比较;它在 L2S 和 L2E 中都受支持。
    【解决方案2】:
        var retVal = (from s in dataContext.YourTable where
    
    s.UserName.Equals("name")
    group s by s.PageName into k
    select new {PageName = k.Key, Count = k.Count() }).ToList();
    

    【讨论】:

    • s 不在select 子句的范围内。此时,您处理的是,而不是单个记录。幸运的是,您可以使用组的密钥。
    • 谢谢乔恩,我会小心的,现在修复。