2014-03-04 56 views
-4

我在編寫LINQ時遇到了麻煩,因爲我是新手:如何使用LINQ進行過濾?

如何編寫LINQ查詢以在dataItem2中顯示處理日期?當我在查詢中添加select {}時,出現一條IEnumerable未使用的錯誤消息。

這與僞數據的數據結構:

List<DataItem> allData = new List<DataItem>(); 
var dataItem2 = new DataItem(); 
dataItem2.AddHeader("Process Date", "10/30/2014"); 
dataItem2.AddHeader("ABC Rank", "None"); 
dataItem2.AddDataRow(new[] { "a2aaa0", "2x0", "c2ccc0" }); 
dataItem2.AddDataRow(new[] { "a2aaa1", "b2bbb1", "c2ccc1" }); 
allData.Add(dataItem2); 

這是DataItem的類:

class DataItem 
{ 
    private readonly Dictionary<string, string> _headers = new Dictionary<string, string>(); 
    private readonly List<string[]> _rows = new List<string[]>(); 

    public IEnumerable<string> Headers 
    { 
     get { return _headers.Keys; } 
    } 

    public void AddHeader(string key, string value) 
    { 
     _headers.Add(key, value); 
    } 

    public string GetHeader(string key) 
    { 
     return _headers[key]; 
    } 

    public string[] GetDataRow(int rowNumber) 
    { 
     return _rows[rowNumber]; 
    } 

    public void AddDataRow(string[] row) 
    { 
     _rows.Add(row); 
    } 

    public int RowCount 
    { 
     get { return _rows.Count; } 
    } 

    public void Print() 
    { 
     Console.WriteLine("New item:"); 
     foreach (var header in Headers) 
     { 
      Console.WriteLine("{0}: {1}", header, GetHeader(header)); 
     } 
     for (int i = 0; i < RowCount; i++) 
     { 
      var row = GetDataRow(i); 
      for (int j = 0; j < row.Length; j++) 
      { 
       Console.WriteLine("Cell ({0}, {1}): {2}", i, j, row[j]); 
      } 
     } 
    } 

違規代碼:

var typedQry = from b in allData.AsEnumerable() 
       select new DataItem { b.GetHeader("Status") }; 
Console.WriteLine(typedQry.ToList()); 
+0

您還可以顯示您正在使用的LINQ? –

+2

如何向我們展示生成錯誤的代碼行,而不是所有其他不相關的代碼? –

+0

VAR typedQry =從步驟b中allData.AsEnumerable() 選擇新的DataItem { b.GetHeader( 「狀態」) }; Console.WriteLine(typedQry.ToList()); – user2142250

回答

0

顯示從dataItem2processDate不需要LINQ ...只是用戶標準點符號。如果這不能回答你的問題,請發佈相關的代碼。

有道:

dataItem2.ProcessDate 

在另一方面,如果你擁有的DataItem對象的集合象下面這樣:

List<DataItem> items = PopulateMyItems(); 

,那麼你可以過濾像這樣:

items.Where(t=>t.ProcessDate > TwoWeeksAgo); 

其中TwoWeeksAgo將是兩週前的DateTime。

+0

感謝您的幫助。由於Process Date不是DataItem屬性類中的屬性,因此我修改了代碼以使其工作:dataItem2.GetHeader(「Process Date」)。您的答案被標記爲已接受。 – user2142250

0

試試這個:

var typedQry = from b in allData.AsEnumerable() 
       select new { Status = b.GetHeader("Status") }; 

var typedQry = from b in allData.AsEnumerable() 
       where b.GetHeader("Status") != null 
       select b; 

取決於你想要做什麼。