2014-03-04 67 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; 

取决于你想要做什么。