2014-10-02 85 views
1

如何获得从OrderBy/GroupBy生成的新表的主要内容?我如何获得从OrderBy/GroupBy生成的新表的主要?

var something = (from m in _db.Requests 
       where m.StoreID == myRequest.StoreID 
       where m.AcceptedTime != null 
       where System.Data.Entity.DbFunctions.TruncateTime(m.RequestTime) == today 
       group m by m.StaffID into g 
       let TotalPoints = g.Count() 
       orderby TotalPoints ascending 
       select new { User = g.Key}); 

然后,我试图让第一个结果,这将是最次的“M”在我Requests表出现

var thisStaff = something.Select(o=>o.User).Take(1).ToString(); 

然而,“thisStaff”值不StaffID这是我的Request表的关键。它的值是

SELECT TOP (1) [Project1].[StaffID] AS [StaffID] 
FROM (SELECT [GroupBy1].[A1] AS [C1], [GroupBy1].[K1] AS [StaffID] 
     FROM (SELECT [Extent1].[StaffID] AS [K1], COUNT(1) AS [A1] 
       FROM [dbo].[Requests] AS [Extent1] 
       WHERE ([Extent1].[StoreID] = @p__linq__0) AND 
         ([Extent1].[AcceptedTime] IS NOT NULL) AND 
         ((convert (datetime2, convert(varchar(255), [Extent1].[RequestTime], 102) , 102)) = @p__linq__1) 
       GROUP BY [Extent1].[StaffID]) AS [GroupBy1]) AS [Project1] 
ORDER BY [Project1].[C1] ASC 

请建议我应该如何改变它。顺便说一句,我也尝试使用以下几乎相同的结果。

var something2 = _db.Requests 
    .Where(o => o.StoreID == myRequest.StoreID) 
    .Where(o => o.AcceptedTime != null) 
    .Where(o => System.Data.Entity.DbFunctions.TruncateTime(o.RequestTime) == today) 
    .GroupBy(x => x.StaffID) 
    .Select(x => new 
    { 
     Count = x.Count(), 
     Name = x.Key, 
    }) 
    .OrderBy(x => x.Count) 
    .Take(1); 

回答

0

您所查询的是好的,你只是缺少方法调用,将调用数据库,并返回结果(EF的一个特征是延迟执行),FirstOrDefault()应该做的伎俩:

var thisStaff = something.Select(o => o.User).FirstOrDefault(); 

您看到的值是您为其ToString方法(它将是执行查询时针对数据库运行的SQL)返回的IQueryable的值。

+0

看来我的查询总是返回默认值,这是主要问题。猜猜我必须再次检查我的查询。感谢您的快速回复! – 2014-10-02 10:28:09

相关问题