dhl:Linq之group by 学习 使用

对这个数据:

dhl:Linq之group by 学习 使用_第1张图片

进行如下如下查询:

select top 8 max(createtime) as createtime,actiontype,pingcoid from AppleGrange.ActionLog
where topingcoid = '3007007007' and pingcoid<>'3007007007'
group by actiontype,pingcoid
 order by createtime desc

的到

dhl:Linq之group by 学习 使用_第2张图片

相应的Linq查询:

 

Code

 

 或者:

 

Code

 

结果:

dhl:Linq之group by 学习 使用_第3张图片

dhl:Linq之group by 学习 使用_第4张图片

 

 

         ///   <summary>
        
///  拨打记录
        
///   </summary>
        
///   <param name="pingcoId"></param>
        
///   <returns></returns>
         public  List < CallLog >  GetUserCallLog( string  pingcoId)
        {
            var list 
=   new  List < CallLog > ();
            var query 
=  _context.CallLog.Where(u  =>  u.PingCoId  ==  pingcoId).GroupBy(u  =>  u.Called);
            
foreach  (IGrouping < string , CallLog >  log  in  query)
            {
                var v 
=  log.OrderByDescending(l => l.CreateTime).FirstOrDefault();  // 注意此时log还是list
                list.Add(v);
            }
            var vv 
=  from l  in  list orderby l.CreateTime descending select l;
            
return  vv.ToList();
        }

 

 

--

Group
Group是进行分组操作,同SQL中的Group By类似。
原型如下:

public static IEnumerable < IGrouping < TKey, TSource >> GroupBy < TSource, TKey > (
    
this IEnumerable < TSource > source,
    Func
< TSource, TKey > keySelector)


它有几个重载,返回类型有两种:IEnumerable<IGrouping<TKey, TSource>> 和 IEnumerable<TResult>。
返回类型为:IEnumerable<IGrouping<TKey, TSource>>
示例:
返回按PIngcoId分组 的人数:

var r = from pingcoid in _context.AskPwdLog group pingcoid by pingcoid.PingcoId into p select p;

或:等效的扩展方法调用实现为:

 v = _context.AskPwdLog.GroupBy(u => u.PingcoId);

注:
scoreGroup为IGrouping<TKey, TSource>类型,返回结果为IEnumerable<IGrouping<TKey, TSource>>,既集合的集合,因此输出时需用双重循环。
IGrouping<TKey, TElement>接口定义为:

public interface IGrouping < TKey, TElement > : IEnumerable < TElement > , IEnumerable
{
    TKey Key {
get ; }
}

其中Key为分组依据的字段。

foreach ( var group in result)
{
    
// 输出分组依据的字段
    Console.WriteLine( " \n Id: " + group .Key);

    
// 输出组内成员
     foreach ( var s in group )
    {
        Console.WriteLine(s.time);
    }
}

// result:
// Student ID:1
// Student ID:1,Course ID:1,time:2010-09-11
// Student ID:1,Course ID:2,time:2010-09-12
// ...

// Student ID:2
// Student ID:2,Course ID:1,time:2010-09-11
// ...

 

 

 

---2010-04-28---实例:---
     
 // <summary>
        /// 每个人索要的总次数
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public  List<AskingPassword>  GetAskPasswordGroupNum()
        {
            var askingPasswords = new List<AskingPassword>();
            var v = _context.AskPwdLog.GroupBy(u => u.PingcoId);
            foreach (IGrouping<string, AskPwdLog> askPwdLogs in v)
            {
                var ask = new AskingPassword();
                ask.PingCoId = askPwdLogs.Key;
                ask.AskNum = askPwdLogs.Count(); //分组后的条数
                askingPasswords.Add(ask);
            }
            return askingPasswords;
        }

你可能感兴趣的:(by,group)