// 一
int level = 0;    
var tmp = p.usePropDic.Where(u => u.Value.systemPropId == propId);
if (tmp.Count() != 0) level = tmp.Max(o => o.Value.level);// 二    
int level = 0;    
foreach (KeyValuePair<int, UseProp> u in p.usePropDic)    
{
 if (u.Value.systemPropId == propId && level < u.Value.level)
 level = u.Value.level;
}都是赋值给level,哪个效率高?

解决方案 »

  1.   

    加个时间就知道,谁快谁慢了啊。我跟人支持 第二种。linq 归根结底,就是循环
      

  2.   

    只有加时间测试后才能确认不过凭经验感觉后者更优var tmp = p.usePropDic.Where(u => u.Value.systemPropId == propId); 遍历筛选了一次
    tmp.Count() 统计了一次
    level = tmp.Max(o => o.Value.level); 在筛选后的集合中又遍历一次取最大值
      

  3.   

    第一种可以直接写成一句,没有必要去做Count这个判断p.usePropDic.Where(u => u.Value.systemPropId == propId).Max(o => o.Value.level);
      

  4.   


    Where是延迟加载的
    也就是说到Count()这里才会真正去查询并返回数量,就LZ这个需求完全一句就可以搞掂
    int level = p.usePropDic.Where(u => u.Value.systemPropId == propId).Max(o => o.Value.level);
    这正是Linq的一大优势,编译器会进一步进行优化的,性能相信差不了
    相比Linq带来的可读性以及开发效率有时候显得要重要得多
      

  5.   

    4楼5楼, where出来是空的时候,用max就会出错了,所以要判断一个count....
      

  6.   

    Count MAX 都是非延迟操作符
    如果数据量不大的话 用foreach是最快的
      

  7.   

    Linq在处理大数据时,可以提现它的效率,但是在几十条数据或者几百条数据,Linq就是自杀。
    Linq的最大优点就是简化了代码,提高了代码的可读性及可维护性。