2013-09-03 5 views
0

나는 그런 상황에 처해있다. 나는 날짜와 시간이 같은 문자열을 가지고있는리스트를 가지고있다 : 05-04-2011 12:42:03.199. datetimepicker 및 내 사용자 정의 timepicker에서 선택된 날짜까지이 목록을 필터링 할 수 있기를 원합니다. 두 값을 모두 string try1 = timePicker1.Value.ToString();string try2 = dateTimePicker5.Value.ToString("dd-MM-yyyy") 문자열에 저장합니다. 나는 이미이 같은 view으로 필터링을 수행 :날짜를 기준으로 목록 필터

view2.RowFilter = "TimeColumn >= '" 
        + dateTimePicker5.Value.ToString("dd-MM-yyyy") + " " 
        + try1 
        + "' and TimeColumn <= '" 
        + dateTimePicker4.Value.ToString("dd-MM-yyyy") + " " 
        + try2 + "'"; 
내가 LINQ와 함께 할 수있는 방법을 알고 새로운 목록에 결과를 저장하려는

? 상단 및 하단에서 축소하여 필터링 할 수 있습니까?

희망 나는 그것을 아주 분명하게 만들었다. 그냥 말해주지 않고 더 explaing하려고합니다!

+0

왜 'DateTime'을'String'으로 저장합니까? 그리고 왜 날짜가 포함 된'List '을 가지고 있습니까? –

+0

@TimSchmelter이 문제는 그의 필터링 문제보다 중요하다고 생각합니다. –

+0

내 기본 회선이이 데이터로만 구성되어 있지 않으므로이 방법을 사용합니다. 먼저 3 부분으로 나누고 문자열 배열로 저장합니다. 그것은 데이터와 많은 텍스트를 내부에 가지고 있습니다. 다른 방법으로 어떻게 할 수 있습니까? – user2592968

답변

1

DateTimeString으로 저장하는 이유는 무엇입니까? 그리고 에 DateTime가 포함 된 이유는 무엇입니까? 항상 가장 적절한 데이터 유형을 사용하고 가장 마지막에 문자열로 변환해야합니다.

그러나이 작동합니다 :

string dateFormat = "dd-MM-yyyy HH:mm:ss.fff"; 
IEnumerable<string> filtered = strings 
    .Select(str => new { str, dt = DateTime.ParseExact(str, dateFormat, CultureInfo.InvariantCulture) }) 
    .Where(x => x.dt >= start && x.dt <= end) 
    .OrderBy(x => x.dt) // if you want to order by the datetime value 
    .Select(x => x.str); 

이 쿼리는 모든 문자열을 사용하고 DateTime로 변환 DateTime.ParseExact를 사용합니다. 그런 다음 원래의 stringDateTime의 두 가지 속성과 DateTime 속성과 시작 및 종료 값으로 Enumerable.Where의 필터가있는 익명 유형 (new{ .... })을 만듭니다. 리마잉 아이템은 datetime (보너스)에 의해 정렬됩니다. 마지막으로 문자열이 선택됩니다. 원하는 결과라고 가정했기 때문입니다.

쿼리를 구체화해야하는 경우 ToList 또는 간단한 foreach을 사용할 수 있습니다. 귀하의 의견에 따라

foreach(string strDate in filtered) 
{ 
    Console.WriteLine(strDate); 
} 

편집 :

좋아, 그래서 내 기본 라인 처럼 보이는 경우 어떻게 내가 날짜 시간으로 저장할 수 있습니다이 2011년 5월 4일 12 : 42 : 04.160, 이벤트 dssd (23) .dfgg [2] 1 xx : 3332, 일부 자세한 텍스트. 나는이 줄을 분리하고 각 부분을 문자열 배열 문자열 [] _columns = line.Split (",". ToCharArray());에 각 부분을 저장한다. 첫 번째 부분은 datetime으로 저장하고 나머지는 문자열로 저장할 수 있습니까?

string dateFormat = "dd-MM-yyyy HH:mm:ss.fff"; 
string[] lines = new[]{"05-04-2011 12:42:04.160,Event dssd(23).dfgg[2] 1 xx:3332,some more text"}; 
var lineIfos = lines.Select(s => s.Split(',')) 
    .Select(split => new{ 
     date = DateTime.ParseExact(split[0].Trim(), dateFormat, CultureInfo.InvariantCulture), 
     rest = string.Join(",", split.Skip(1)) 
    }) 
    .Where(x => x.date >= start && x.date <= end) 
    .OrderBy(x => x.date); 

foreach (var x in lineIfos) 
    Console.WriteLine("date:{0} rest of the line:{1}" 
     ,x.date.ToString("d") 
     ,x.rest); 
+0

코드를 조금 설명 할 수 있습니까? 실제로 이해할 수는 없습니다. 죄송합니다. – user2592968

+0

@ user2592968 : 내 대답을 편집했습니다. –

+0

이렇게 했는데도 여전히 오류가 발생합니다. 내 코드는 다음과 같습니다. 'IEnumerable filtered = list3.Select (str => new {str.LeftColumn, dt = DateTime.ParseExact (str.LeftColumn, dateFormat, CultureInfo.InvariantCulture)}). 여기서 (x => x.dt> = time1 && x.dt <= time2) .OrderBy (x => x.dt) .Select (x => x.str); ' – user2592968