请教LINQ复杂查询

qsq3 2011-02-28 09:40:54
一个表route记录了某个IP地址各个时段的下行速率、下载、上传总字节等信息,想要查询反回所有IP地址下行速率为最大时那行数据,写了以下代码,反回是正确的。但是这样写法总感觉不是好的写法,想请高人指导一下,给个更优化的代码。


 DataTable dt = dataSet.Tables["route"];
var query = (from row in dt.AsEnumerable() select new { rowIpAdess = row.Field<string>("IP地址") }).Distinct();

foreach (var row in query)
{



List<DataRow> drs = (from d in dt.AsEnumerable()

where d["下行速率"].ToString() == (from f in dt.AsEnumerable()
where f["IP地址"].ToString() == row.rowIpAdess.ToString()
select f).Max(p => p["下行速率"]).ToString()
select d).ToList();
}
...全文
227 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsq3 2011-03-01
  • 打赏
  • 举报
回复
1楼的代码还是有问题的,最后改成这样。
 var query = (from row in dt.AsEnumerable() select new { rowIpAdess = row.Field<string>("IP地址") }).Distinct();



foreach (var row in query)
{

DataRow[] dr = dataSet1.Tables["routestata"].Select("IP地址='" + row.rowIpAdess.ToString() + "'");

object max = dr.Max(p => p["下行速率"]);

object d = dr.Where(p => p["下行速率"]==max);
}
  • 打赏
  • 举报
回复
使用一行Linq语句,需要分组。例如上面101 Samples中的《Max - Elements》例子(扫了一下,可能差不多)。


另外,我有个“怪癖”,就是非常不爱看到随便写“.ToString()”代码的程序。如果你知道一个object变量是string类型的,那么就直接转换其类型,例如写 (string)row["abc"]。

调用一个对象的.ToString()函数跟强制转换为string,是完全不同的概念,得到的结果也不尽相同。
  • 打赏
  • 举报
回复
学习 Linq 的例子可以看这个页面:http://msdn.microsoft.com/en-us/vcsharp/aa336746
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zjx198934 的回复:]

最优化的写法是用sql 不用linq!
[/Quote]

DataTable 里边可以编译 sql?
zjx198934 2011-02-28
  • 打赏
  • 举报
回复
最优化的写法是用sql 不用linq!

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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