法1:
第一种方法可以采用复制一个Datatable然后循环需要筛选的DataTable,循环出最新的十条,添加到复制的DataTable中。
DataTable dt = ETMSoft.Cache.ETMCache.GetCacheService().RetrieveObject("/news/newscache") as DataTable;
// if (dt == null)
// {
// DataTable Newsdt = GetAllNews();
// CacheManage.NewsCache(Newsdt);
// DataView NewView = new DataView(Newsdt);
// NewView.RowFilter = "Menu_Pk='" + IntClass + "'";
// NewView.Sort = " News_Time desc ";
// Newsdt = NewView.ToTable();
// DataTable dtv = new DataTable();
// dtv = Newsdt.Clone(); //复制一个dataTable
// for (int i = 0; i < Newsdt.Rows.Count&&i<10; i++)
// {
// DataRow dr = Newsdt.Rows[i];
// dtv.Rows.Add(dr.ItemArray); //此处通过一个数组来添加和设置行的所有值.
// }
// return dtv;
// }
// else
// {
// DataView view = new DataView(dt);
// view.RowFilter = "Menu_Pk='" + IntClass + "'";
// view.Sort = " News_Time desc ";
// dt = view.ToTable();
// DataTable dtv = new DataTable();
// dtv = dt.Clone(); //复制一个dataTable
// for (int i = 0; i < dt.Rows.Count&&i<10; i++)
// {
// DataRow dr = dt.Rows[i];
// dtv.Rows.Add(dr.ItemArray);
// }
// return dtv;
法2:上面第一种方法虽然可以用DataView实现刷选出最新的十条,但是由于需要复制一个DataTable并且还需要循环添加到另一个DataTable中,第一种方法并不理想,本来就是想利用缓存提高网站的性能,所以一直都想找到另外一种相对性能上比较的方法,原来的查阅了很多资料也没找到,后来无意之间想到了一种很简单的方法,提供给大家分享:
///////////////就是利用DataView.RowFilter筛选条件当数据超过十条的时候,按时间降序排列,只要用新闻发布时间大于第十条的新闻发布时间,DataView就可以筛选出最新的十条(这个方法简单吧!)
public DataTable NoticePhotoNews(int IntClass) ///////////////////////////////////////////////查询出数据创建缓存的时候按新闻发布时间降序,DataView筛选的的时候没必要再按时间降序排列一遍,这样可以提高性能
{
int s = 10;
DataTable dt = ETMSoft.Cache.ETMCache.GetCacheService().RetrieveObject("/news/newscache") as DataTable;
if (dt == null)
{
DataTable Newsdt = GetAllNews();
CacheManage.NewsCache(Newsdt);
DataView NewView = new DataView(Newsdt);
NewView.RowFilter = "Menu_Pk='" + IntClass + "'";
if (NewView.Count >= 10)
{
NewView.RowFilter = "News_Time > '" + NewView[10]["News_Time"].ToString() + "'";
}
Newsdt = NewView.ToTable();
return Newsdt;
}
else
{
DataView view = new DataView(dt);
view.RowFilter = "Menu_Pk='" + IntClass + "'";
if (view.Count >= 10)
{
view.RowFilter = "News_Time > '" + view[10]["News_Time"].ToString() + "'";
}
dt = view.ToTable();
return dt;
}
}
三、法三:可以用dt.Select()方法筛选出最新的十条代码如下:
public DataTable NoticePhotoNews(int IntClass) ///////////////////////////////////////////////查询出数据创建缓存的时候按新闻发布时间降序,DataView筛选的的时候没必要再按时间降序排列一遍,这样可以提高性能
{
int s = 10;
DataTable dt = ETMSoft.Cache.ETMCache.GetCacheService().RetrieveObject("/news/newscache") as DataTable;
if (dt == null)
{
DataTable Newsdt = GetAllNews();
CacheManage.NewsCache(Newsdt);
DataView NewView = new DataView(Newsdt);
NewView.RowFilter = "Menu_Pk='" + IntClass + "'";
//if (NewView.Count >= 10)
//{
// NewView.RowFilter = "News_Time > '" + NewView[10]["News_Time"].ToString() + "'";
//}
Newsdt = NewView.ToTable();
if (Newsdt.Rows.Count >= 10)
{
Newsdt.Select("News_Time > '" + NewView[10]["News_Time"].ToString() + "'");
}
return Newsdt;
}
else
{
DataView view = new DataView(dt);
view.RowFilter = "Menu_Pk='" + IntClass + "'";
//if (view.Count >= 10)
//{
// view.RowFilter = "News_Time > '" + view[10]["News_Time"].ToString() + "'";
//}
dt = view.ToTable();
if (dt.Rows.Count >= 10)
{
dt.Select("News_Time > '" + view[10]["News_Time"].ToString() + "'");
}
return dt;
}
}
四、法四:如果.net版本是3.5以上可以采用ling查询DataSet(有待研究)
from m inMyTable
take 10
select m
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架