简体   繁体   English

如何在linq中使用group by

[英]how to use group by in linq

I have one news repeater that show two fields like News_Text and News_Date . 我有一个新闻转发器,显示两个字段,如News_TextNews_Date

Here I just want to display this data with group by News_date . 在这里,我只想与group by News_date显示此数据。

like: 喜欢:

12/24/2013
test
test1
test 2

11/12/213
blah..blah

here is my code: 这是我的代码:

private void BindNewsRepeater()
    {
        using (DataClassesDataContext db = new DataClassesDataContext())
        {
            var query = from n in db.News
                        orderby n.News_date descending
                        select new 
                    {
                         News_text = n.News_text,
                         News_date = n.News_date
                    };

            DataSet myDataSet = new DataSet();
            DataTable dt = new DataTable();
            dt.Columns.Add(new DataColumn("News_text", typeof(string)));
            dt.Columns.Add(new DataColumn("News_date", typeof(string)));
            foreach (var item in query)
            {
                DataRow dr = dt.NewRow();
                dr["News_text"] = item.News_text.ToString();
                dr["News_date"] = item.News_date.ToString("dd/MM/yyyy");
                dt.Rows.Add(dr);
            }
            myDataSet.Tables.Add(dt);
            rpt_news.DataSource = myDataSet;
            rpt_news.DataBind();
        }
    } 

and my repeater design code is: 我的中继器设计代码是:

<asp:Repeater ID="rpt_news" runat="server" onitemdatabound="rpt_news_ItemDataBound">
     <ItemTemplate><asp:Label ID="lbl_news_date" runat="server"><%#Eval("News_date")%></asp:Label><br />
                                            <asp:Label ID="lbl_news_text" runat="server"><%#Eval("News_text")%></asp:Label>
                                            </ItemTemplate>
                                            <SeparatorTemplate><br/><br/></SeparatorTemplate>
     </asp:Repeater>

You can simply GroupBy News_date , then select for each key of News_date a list of News_Text . 你可以简单GroupBy News_date ,然后选择的每个键News_date列表News_Text Something like this: 像这样的东西:

var results = News
    .GroupBy(n => n.News_date)
    .Select(g => new {
        NewsDate = g.Key,
        NewsTexts = g.Select(x => x.News_Text)
    });

This will return a list of News_Text for each NewsDate . 这将返回每个NewsDateNews_Text列表。

var query = db.News
           .OrderBy(n => n.News_date)
           .GroupBy(n => n.News_date, n => n.News_text);

foreach (var g in query)
{   
     foreach(var t in g)
     {
         DataRow dr = dt.NewRow();
         dr["News_text"] = t.ToString();
         dr["News_date"] = g.Key.ToString("dd/MM/yyyy");
         dt.Rows.Add(dr);
     }
}   

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM