2014-03-04 2 views
-4

초보자로서 LINQ 작성에 어려움이 있습니다.LINQ를 사용하여 필터링하는 방법?

DataItem2의 프로세스 날짜를 표시하는 LINQ 쿼리를 작성하는 방법은 무엇입니까? 쿼리에서 select {}를 추가하면 IEnumerable이 사용되지 않는다는 오류 메시지가 나타납니다. 이것은있는 DataItem 클래스입니다

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); 

:

더미 데이터와 데이터 구조입니다

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 = from allData.AsEnumerable() 새 DataItem 선택 { b.GetHeader ("상태") }; Console.WriteLine (typedQry.ToList()); – user2142250

답변

0

이 필요하지 않습니다 dataItem2에서 processDate 표시 LINQ ... 그냥 사용자 표준 점 표기법. 이 질문에 대한 답변을 얻지 못하면 관련 코드를 게시하십시오.

적절한 방법 : 한편

dataItem2.ProcessDate 

아래처럼있는 DataItem의 컬렉션 개체가있는 경우 : 당신과 같이 필터링 할 수 있습니다 다음

List<DataItem> items = PopulateMyItems(); 

:

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

여기서 TwoWeeksAgo은 2 주 전의 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; 

.

관련 문제