在同一查询中收集数据

时间:2014-04-10 17:25:12

标签: c# sql

我需要使用单个查询根据日期获取数据。并在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);
        }

3 个答案:

答案 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() );
}