0

我的 SQL Anywhere 12.0.1 数据库中有一个表:

CREATE TABLE Entries (
    ListId        UNIQUEIDENTIFIER NOT NULL,
    . . .
);

我需要查询表以获取表中具有相同 ListID 的行数。在 SQL 中:

SELECT ListID, COUNT(*)
FROM Entries
GROUP BY ListId;

我想使用 Entity Framework 4.x 执行这个查询,并且我想将结果作为Dictionary<Guid, long>. 像这样的东西:

public Dictionary<Guid, long> GetRowCounts( MyEntities context ) {
    Dictionary<Guid, long> result = null;
    try {
        result = ( from entry in Entries
                   group entry by entry.ListId into listGroup
                   select listGroup ).ToDictionary( grp => grp.Key, ???? );

    } catch ( Exception ex ) {
        . . .
    }
    return result;
}

请记住,我想要返回每个唯一 ListId 的行数。我用什么代替“???”?

4

1 回答 1

3

好吧,看看你写的:

记住,我想要行

(强调我的)。所以你需要:

ToDictionary(grp => grp.Key, grp => grp.Count())

我个人会写这样的方法:

public Dictionary<Guid, int> GetRowCounts(MyEntities context) {
    return context.Entries
                  .GroupBy(entry => entry.ListId)
                  .ToDictionary(g => g.Key, g => g.Count());
}

...或者如果您仍然希望它是 a Dictionary<Guid, long>、 useg => g.LongCount()或只是强制转换:

.ToDictionary(g => g.Key, g => (long) g.Count())

你几乎肯定不想要 try/catch 块,直接返回要简单得多。同样,除非您正在编写一个中等复杂的查询,否则使用查询表达式确实没有任何好处。学习直接使用扩展方法,以便为每个查询编写最简单的代码。

于 2012-11-20T20:58:37.023 回答