按多个表分组仍然可以访问原始查询?

时间:2012-06-14 06:20:09

标签: c# sql linq linq-to-entities group-by

我正在尝试进行加入,然后进行分组,我返回的分组信息很棒!工作就像一个魅力,但我仍然需要访问分组以外的值,如果这是有道理的..

我在stackoverflow上找到了一个例子,这可能更好地解释了

var query = from c in context.Contacts
            join o in context.Orders on c.Id equals o.CustomerId
            select new 
            { 
                Contact = c, 
                Order = o 
            } into ContactAndOrder
            group ContactAndOrder by ContactAndOrder.Order.Id into g
            select new 
            { 
                g.Key, 
                ContactWhatever = g.Sum(co => co.Contact.Whatever), 
                OrderWhatever = g.Sum(co => co.Order.Whatever) 
            };

现在这似乎工作得很好,问题是在我的情况下co.Order.Whatever是一个字符串所以我得到一个错误说不能将字符串转换为int,这我理解为聚合函数Sum期望一个int。 ...

我的问题是,是否有一个聚合函数或类似的东西我可以得到co.Order.Whatever的值(在我的情况下是一个字符串)

问题在于,一旦完成了小组,我就会失去“c”和“o”

我希望有人可以提供帮助。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果组中总是相同,那么第一个就足够了......

ContactWhatever = g.First().Contact.Whatever

否则使用@Andrei答案 或

ContactWhatever = g.Select(o => o.Contact.Whatever).Aggregate((a,b) => a + "," + b)