2011-10-13 3 views
1

람다를 처음 사용. 이 질문은 구체적으로 람다 식으로 날짜 서식을 조작하는 것입니다. 스케줄러 시스템에서 모든 알림을 얻기 위해 사용되는 아래 코드 :날짜 형식을 지정하는 데 람다 식을 사용하는 방법

MyReminders = ScheduledActionService.GetActions().Where(
    a => a.BeginTime.Date == Today 
); 
  1. 결과 집합을 반환하기 전에 날짜 형식을 변경할 수 있습니다.

    .where (
        a => a.BeginTime.Date == Today).Select(
         //the date and format 
         BeginTime.date.ToString("d", new cultureInfo("zh-CN")) 
    ) 
    
  2. 다음과 같이 날짜 형식을 변경하십시오.이 형식은 람다 식에서 작동합니까?

    BeginTime.Date.ToString("d",new cultureInfo("zh-CN"), 
    

감사합니다 당신의 도움을 주셔서 감사합니다.

------------ 업데이트 :

나는이 두 가지 방법을 시도했다. ListBox에 결과가 표시되지 않습니다.

이 스케줄러 시스템은 Windows Phone 7 용입니다.이 미리 알림 개체는 다음 속성을 포함합니다. 1) BeginTime, 2) 만료 시간, 3) 제목, 4) 컨텐트, 5) isSchedule 및 ohers

검색 후, 나는 ListBox에 DataBind해야합니다. ReminderListBox.ItemsSource = MyReminders;

1) var czech = new CultureInfo("zh-CN");

 var MyReminders = ScheduledActionService.GetActions<Reminder>() 
      .Where(a => a.BeginTime.Date == Today) 
      .Select(a => 
      new 
      { 
      Begindate = a.BeginTime.Date.ToString("d", czech), 
      Title = a.Title, 
      Content = a.Content 
      }); 

2) var czech = new CultureInfo("zh-CN"); var MyReminders = ScheduledActionService.GetActions() .Where(a => a.BeginTime.Date == Today) .Select(a => a.BeginTime.Date.ToString("d", czech));

 

    < ListBox Name="ReminderListBox" > 
     < ListBox.ItemTemplate> 
      < DataTemplate> 
      < Grid Background="Transparent" Margin="0,0,0,30"> 

      < StackPanel Orientation="Vertical" > 
       < TextBlock FontSize="23" Text="{Binding Title}"/ > 

        < TextBlock FontSize="23" Text="{Binding Content}" /> 

        < StackPanel Orientation="Horizontal"> 
         < TextBlock Text="begin "/> 
         < TextBlock x:Name="txtDate" Text="{Binding BeginTime}" /> 
         < /StackPanel> 

        < StackPanel Orientation="Horizontal"> 
         < TextBlock Text="expiration "/> 
         < TextBlock Text="{Binding ExpirationTime}"/> 
         < /StackPanel> 
        < StackPanel Orientation="Horizontal"> 
         < TextBlock Text="recurrence "/> 
        < TextBlock Text="{Binding RecurrenceType}" /> 
        < /StackPanel> 
         < StackPanel Orientation="Horizontal"> 
         < TextBlock Text="is scheduled? "/> 
         < TextBlock Text="{Binding IsScheduled}"/> 

          < /StackPanel> 

            < /StackPanel> 

           < /Grid> 
          < /DataTemplate> 
         < /ListBox.ItemTemplate> 
        < /ListBox> 
 

답변

1

당신은 Where에 술어를 통과 항목을 선택할 수 있습니다 할 수 있습니다 프로젝트 종류의 서로 다른 순서로 그,하지만 할 수 있습니다 (해야)하지 변화 시퀀스의 항목. YourType는 시퀀스의 요소의 형태이고 string 표현식의 출력이고,이 예에서는

var results = yourSequence.Where(yourPredicate) 
          .Select(item => item.BeginDate.ToString("yourformat")); 

는 람다는 Func<YourType, string>이다. 즉, 왼쪽에 item => 입력 ( YourType)이 걸리며 오른쪽에 item.BeginDate.ToString() 출력 ( string)이 생성됩니다.

IEnumerable<string>BeginDate 값으로 구성되며 원하는 문자열 형식입니다. 또는, 당신은 다른 종류의

var results = yourSequence.Select(item => 
      new 
      { 
       DateString = item.BeginDate.ToString("yourformat"), 
       Foo = item.Foo, 
       Bar = item.Bar 
      }); 

에 투사 할 수 이것은 당신에게 당신이 다음을 통해 루프가 DateString, FooBar 속성에 액세스 할 수있는 IEnumerable<AnonymousType>을 줄 것이다. 물론 람다는 Func<YourType, AnonymousType>을 나타낼 것입니다.

1

나는 람다가 무엇인지 이해하지 못한다고 생각합니다.그것의 핵심은, 람다는 정확하게는 (은 일반 위임 Func을 사용합니다 제외) 매우 비슷한 아래로 컴파일

delegate bool FilterMyObject(MyObject) 

bool WhereToday(MyObject obj) { 
    return obj.BeginTime.Date == Today 
} 

.... 

MyReminders = ScheduledActionService.GetActions().Where(new FilterMyObject(whereToday)) 

(귀하의 경우)과 동일합니다.

이제 Linq2Sql 또는 Expression<Func<T,bool>> 유형의 매개 변수가있는 다른 곳에서 메소드를 구현 한 사람이 수행하려는 작업을 검토 할 기회가 생기고 (일반적으로 최적화 할 때)).

, 당신은 아마 원하는 귀하의 질문에 대답하려면

var czech = new CultureInfo("zh-CN"); 
var MyReminders = ScheduledActionService.GetActions() 
       .Where(a => a.BeginTime.Date == Today); 
       .Select(a => a.BeginTime.Date.ToString("d",czech) 
       .ToArray(); 

어떤을 출력 포맷 문자열

을의 배열
관련 문제