SELECT ClmID, MAX(CPDate) FROM tb_ClaimProcces
WHERE (CPDate > '2009-01-05')
GROUP BY ClmID
SELECT ClmID, MAX(CPDate) FROM tb_ClaimProcces
WHERE (CPDate > '2009-04-05')
GROUP BY ClmIDClmID是外键 我想查询他所对应的tb_ClaimProcces表中的近几天的记录根据ClmID进行分组然后找每组最近的一条记录
我想得到的是 list<tb_ClaimProcces>这样的集合
每个元素有ClmID, MAX(CPDate)两个属性 
sql 是上面那样 但不知道用linq这么写
  各路英雄帮帮忙

解决方案 »

  1.   

    上面多谢了句sql  。急急急
    linq该怎么写啊  我不想得到var这样的集合
    如果得到了是var这样匿名类的集合
    我该怎么拆分出
    他的2个属性啊 循环的时候点不出来啊
      

  2.   


    var query = from t in db.tb_ClainProces
                        where t.CpDate >= new DateTime(2009, 1, 5)
                        group t by t.ClmId into g
                        select new
                        {
                            ClmId = g.Max(p => p.ClmId),
                            MaxDate = g.Max(p => p.CpDate)
                        };        List<tb_ClainProce> myCollection = new List<tb_ClainProce>();
            foreach (tb_ClainProce t in db.tb_ClainProces)
            {
                myCollection.Add(t);
            }
    这样就得到了list <tb_ClaimProcces> = myCollection这样的集合。需要注意的问题是,Proces并不是一个合法英文,所以LINQ也许不能正常自动命名,正常来讲它会命名为tb_ClainProce,去掉S
      

  3.   

    刚才写错了一点点,foreach应该这样写
    foreach (var t in query)
            {
                tb_ClainProcea = new tb_ClainProce();
                a.ClmId = t.ClmId;
                a.CpDate = t.MaxDate;
                myCollection.Add(a);
            }
      

  4.   

          select new
                        {
                            ClmId = g.Max(p => p.ClmId),
                            MaxDate = g.Max(p => p.CpDate)
                        };
    这是什么意思啊
      

  5.   


    选择ClmId相同的情况下每组中的最大日期啊,你也可以把group语句放到select里面嵌套使用,不过我感觉这样结构更清晰一些。
      

  6.   

    MaxDate = g.Max(p => p.CpDate) 我可以理解
    那为什么 要写
    ClmId = g.Max(p => p.ClmId), 不是已经分组了吗?
    p是什么意思,该怎么理解
    =>的含义是什么啊  
    能帮我讲明白点吗?还有你说的嵌套是怎么写的 ,我想看看
    别BS我,
    你的那个循环帮了我大忙 谢谢啦 (第一次写错变量名 第二次忘记写了 呵呵,)
      

  7.   

    ClmId = g.Max(p => p.ClmId) 没什么作用,就是选取ClmId,
    因为ClmId每组中都是一样的,选最大的那一个实际也是同一个。但是貌似不能替换成ClmId = g.Single(p =>p.ClmId),或者ClmId = g.Any(p =>p.ClmId),实际我也刚学LINQ,不是很清楚这个细节。p => p.CpDate 是LINQ中的语法,p可以随便命名
    有点像SQL查询中的
    Select p.UnitPrice, p.Amount from Products p举个例子吧比如一个Products表包含单价和数量两个列:
    var query = db.Products.Select(p => p.数量 * p.单价).Sum(); //就是取出这个表中每个商品的总价格。嵌套查询我刚又想了一下好像不行,还没想通呢。
      

  8.   

    首先说声谢谢! 一晚上又学习了不少!!
    你说的p就像是表的别名是吧。
    我在机子上试
    好像分组之后也可以加where条件
    where写前面和后面有区别吗?var query = db.Products.Select(p => p.数量 * p.单价).Sum();
    我的感觉是查询这个表中所有的商品的总价格
    如果要查询每个商品应该不加sun把。。
    不知道我想错了没帮帮核实。。
      

  9.   


    where写在分组前面和后面都可以,没有区别。var query = db.Products.Select(p => p.数量 * p.单价).Sum(); 
    是查总价格,是我上次说错了。