刚接触linq 这个sql怎么转化为linq查询!!分不多助人为乐嘛!!

qqshenyunzcz 2009-04-11 03:59:15
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 ClmID


ClmID是外键 我想查询他所对应的tb_ClaimProcces表中的近几天的记录根据ClmID进行分组然后找每组最近的一条记录
我想得到的是 list<tb_ClaimProcces>这样的集合
每个元素有ClmID, MAX(CPDate)两个属性
sql 是上面那样 但不知道用linq这么写
各路英雄帮帮忙
...全文
151 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
owenxin26 2009-04-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 qqshenyunzcz 的回复:]
首先说声谢谢! 一晚上又学习了不少!!
你说的p就像是表的别名是吧。
我在机子上试
好像分组之后也可以加where条件
where写前面和后面有区别吗?

var query = db.Products.Select(p => p.数量 * p.单价).Sum();
我的感觉是查询这个表中所有的商品的总价格
如果要查询每个商品应该不加sun把。。
不知道我想错了没。。。帮帮核实。。
[/Quote]

where写在分组前面和后面都可以,没有区别。

var query = db.Products.Select(p => p.数量 * p.单价).Sum();
是查总价格,是我上次说错了。
qqshenyunzcz 2009-04-11
  • 打赏
  • 举报
回复
首先说声谢谢! 一晚上又学习了不少!!
你说的p就像是表的别名是吧。
我在机子上试
好像分组之后也可以加where条件
where写前面和后面有区别吗?

var query = db.Products.Select(p => p.数量 * p.单价).Sum();
我的感觉是查询这个表中所有的商品的总价格
如果要查询每个商品应该不加sun把。。
不知道我想错了没。。。帮帮核实。。
owenxin26 2009-04-11
  • 打赏
  • 举报
回复
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(); //就是取出这个表中每个商品的总价格。



嵌套查询我刚又想了一下好像不行,还没想通呢。

owenxin26 2009-04-11
  • 打赏
  • 举报
回复
刚才写错了一点点,foreach应该这样写


foreach (var t in query)
{
tb_ClainProcea = new tb_ClainProce();
a.ClmId = t.ClmId;
a.CpDate = t.MaxDate;
myCollection.Add(a);
}
owenxin26 2009-04-11
  • 打赏
  • 举报
回复

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
qqshenyunzcz 2009-04-11
  • 打赏
  • 举报
回复
MaxDate = g.Max(p => p.CpDate) 我可以理解
那为什么 要写
ClmId = g.Max(p => p.ClmId), 不是已经分组了吗?
p是什么意思,该怎么理解
=>的含义是什么啊
能帮我讲明白点吗?

还有你说的嵌套是怎么写的 ,我想看看
别BS我,
你的那个循环帮了我大忙 谢谢啦 (第一次写错变量名 第二次忘记写了 呵呵,)
qqshenyunzcz 2009-04-11
  • 打赏
  • 举报
回复
上面多谢了句sql 。。。。急急急
linq该怎么写啊 我不想得到var这样的集合
如果得到了是var这样匿名类的集合
我该怎么拆分出
他的2个属性啊 循环的时候点不出来啊
owenxin26 2009-04-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 qqshenyunzcz 的回复:]
      select new
                    {
                        ClmId = g.Max(p => p.ClmId),
                        MaxDate = g.Max(p => p.CpDate)
                    };
这是什么意思啊
[/Quote]

选择ClmId相同的情况下每组中的最大日期啊,你也可以把group语句放到select里面嵌套使用,不过我感觉这样结构更清晰一些。
qqshenyunzcz 2009-04-11
  • 打赏
  • 举报
回复
select new
{
ClmId = g.Max(p => p.ClmId),
MaxDate = g.Max(p => p.CpDate)
};
这是什么意思啊

62,073

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧