我需要使用单个查询根据日期获取数据。并在c#
中显示数据我尝试了以下查询来获取记录
“按日期从新闻订单中选择不同的日期,新闻”
此查询的结果:
Date News
2/3/2014 Jeo news
2/4/2014 Aaj news
2/4/2014 aag
2/4/2014 express news
2/5/2014 dunya news
问题是:如何根据这种格式在c#中显示此记录?
2/3/2014
Jeo news
2/4/2014
Aaj news
aag
express news
2/5/2014
dunya news
这是我的c#代码
try
{
da.Fill(dt);
for(int i=0; i<dt.Rows.Count; i++)
{
Console.WriteLine(dt.Rows[i]["Date"].ToString());
Console.WriteLine(dt.Rows[i]["News"].ToString()) ;
Console.Write("\n");
}
Console.Read();
}
catch (SqlException ex)
{
Console.WriteLine(ex);
}
答案 0 :(得分:1)
您可以使用LINQ To DataSet/DataTable。您可以在日期GroupBy
上,然后选择新闻列表,如:
var result = dt.AsEnumerable()
.GroupBy(r=> r.Field<DateTime>("Date"))
.Select(grp => new
{
Date = grp.Key,
News = grp.Select(r=> r.Field<string>("News")).ToList()
});
稍后输出您可以使用:
foreach (var item in result.OrderBy(r=> r.Date))
{
Console.WriteLine(string.Format("{0}{1}{2}",
item.Date, Environment.NewLine, string.Join(Environment.NewLine,item.News)));
}
答案 1 :(得分:1)
只是把它扔出去,你是按Date
订购的,所以你可以采取将最后一个日期与当前日期进行比较的路线:
var olddate = DateTime.MinValue;
for (int i = 0; i < dt.Rows.Count; i++)
{
var newdate = DateTime.Parse(dt.Rows[i]["Date"].ToString());
if (newdate != olddate)
{
Console.WriteLine();
Console.WriteLine(newdate.ToShortDateString());
}
Console.WriteLine(dt.Rows[i]["News"].ToString());
olddate = newdate;
}
Console.Read();
这将产生您想要的输出
答案 2 :(得分:0)
只需跟踪您打印的最后日期。当它改变时打印新的日期。
string previousDate = String.Empty;
for( int i = 0; i < dt.Rows.Count; i++ )
{
string currentDate = dt.Rows[i]["Date"].ToString();
if( previousDate != currentDate )
{
Console.WriteLine( currentDate );
}
Console.WriteLine( dt.Rows[i]["News"].ToString() );
}