簡體   English   中英

如何使用LINQ選擇然后選擇訂購?

[英]How to Select then OrderBy using LINQ?

我正在嘗試根據較早發布的問題中的以下代碼,按照日期對CSV文件的內容進行排序:

private class CSVEntry
{
    public DateTime Date { get; set; }
    public string Grp { get; set; }
}

...

List<CSVEntry> csvList = new List<CSVEntry>();

csvList.Add(new CSVEntry() { Date = DateTime.ParseExact(col[7], "dd/MM/yyyy", null), Grp = col[9] });

var results = csvList.OrderBy(x => x.Date); // An error occurs at "Date".

...

但是我得到了這個錯誤:

'string'不包含'Date'的定義,也找不到找到接受'string'類型的第一個參數的擴展方法'Date'。

我想要的輸出是其他列中的字符串,但按時間順序排序。 當我嘗試使用此代碼顯示日期時:

var results = csvList.Where(x => x.Grp == "DEFAULT").OrderBy(x => x.Date);

當日期按時間順序排序時,它與輸出完美配合。 但是,這次我不想顯示日期。 我想像上面提到的那樣顯示其他列中的字符串。 我嘗試使用

var results = csvList.Select(x => x.Grp).OrderBy(x => x.Date);

但是也有同樣的錯誤。 我哪里出問題了? 我是LINQ的新手,不熟悉List<T>IEnumerable<T> ,這是我第一次使用它們。

訂購后添加Select記錄,如下所示

var results = csvList
    .Where(x => x.Grp == "DEFAULT")
    .OrderBy(x => x.Date)
    .Select(x => x.Grp);

雷迪的答案應該有用,但我會為您解釋,以便您理解為什么。

當您使用Select(x => x.Grp)語句時,您不再具有IEnumerable<CSVEntry> 您只有csnumList中的所有Grp條目具有IEnumerable。 因此,當您嘗試通過添加OrderBy(x => x.Date)語句按日期對它們進行排序時,Linq不知道Date屬性,因為在此語句中x只是一個字符串,而不是CsvEntry。

在Reddys Answer中,他首先通過Grp == "DEFAULT"過濾所有條目。 之后,他還有一個IEnumerable<CsvEntry> ,因此他可以在x.Date之前對其進行訂購。 之后,他又剩下IEnumerable<CsvEntry> 僅在最后一條語句( Select(x => x.Grp)語句)之后,他才剩下IEnumerable<string>

希望有幫助:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM