【问题标题】:Orderby datetime query in a foreach loopforeach 循环中的 Orderby 日期时间查询
【发布时间】:2012-04-17 02:05:48
【问题描述】:

您好,我有一个休息服务,其中有一个学生列表,每个学生都有一个附加到创建的日期时间。

在我的客户端,我想在这个日期时间之前从最新开始订购,在我的客户端,代码如下所示:

   public FindStudent()
    {
        InitializeComponent();
        string uriGroups = "http://localhost:8000/Service/Student";
        XDocument xDoc = XDocument.Load(uriGroups);

它列出了第一次创建的学生,我想了一会儿我可以在 foreach var 节点中添加一个 orderby 查询,但我认为这行不通,无论如何我可以这样做吗?

【问题讨论】:

  • 这与 WCF、XAML、REST 或 WPF 有什么关系?

标签: c# linq


【解决方案1】:

您可以按如下方式使用 Linq to XML

var temp = from feed in xDoc.Descendants("Students")
orderby Convert.ToDateTime(feed.Element("CreatDate").Value) descending
select new Student
{
    ID = Convert.ToInt32(feed.Element("ID").Value),
    //rest of the properties
};

【讨论】:

  • 我不能在 foreach 循环中使用 select 语句。
  • 在中间数据结构中(在你的 foreach 循环之前)获取 Student 的集合,对其进行排序,然后你可以在你的 foreach 循环中使用它。
  • XElement 可以转换为日期时间:(DateTime)feed.Element("CreatDate")
【解决方案2】:

为了根据日期和时间对某些内容进行排序,您需要在 for-each 循环中将其转换为日期和时间,您只需遍历从 xml 文档中获取的纯文本,它不会被排序,因为它是文本但您可以创建一个带有变量Studentid, FirstName LastName" TimeAdded TimeAdded 的学生类,再次循环通过文档将每个信息写入对象学生将每个对象添加到列表中,按照您想要的方式对列表进行排序,然后我认为它应该按照您想要的顺序显示。

【讨论】:

    【解决方案3】:
    XDocument xDoc = XDocument.Load(uriGroups); 
    var sortedXdoc = xDoc.Descendants("Student")
                   .OrderByDescending(x => Convert.ToDateTime(x.Element("TimeAdded").Value));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多