我在编写LINQ时遇到了麻烦,因为我是新手:
如何编写LINQ查询以在dataItem2中显示Process Date?当我在查询中添加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 :(得分:0)
从processDate
显示dataItem2
不需要LINQ ...只是用户标准点表示法。如果这不能回答您的问题,请发布相关代码。
正确的方法:
dataItem2.ProcessDate
另一方面,如果你有一个DataItem对象的集合,如下所示:
List<DataItem> items = PopulateMyItems();
然后你可以这样过滤:
items.Where(t=>t.ProcessDate > TwoWeeksAgo);
其中TwoWeeksAgo
将是两周前的DateTime。
答案 1 :(得分: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;
取决于你想做什么。