Lambda新手。这个问题特别针对Lambda表达式来操纵日期格式。以下代码用于从调度程序系统获取所有提醒:
MyReminders = ScheduledActionService.GetActions().Where(
a => a.BeginTime.Date == Today
);
可以在返回结果集之前更改日期格式。
.where (
a => a.BeginTime.Date == Today).Select(
//the date and format
BeginTime.date.ToString("d", new cultureInfo("zh-CN"))
)
按如下所示更改日期格式,但这是否适用于lambda表达式?
BeginTime.Date.ToString("d",new cultureInfo("zh-CN"),
感谢您的帮助。
------------更新:
我尝试了这两种方法。 ListBox中没有显示结果:
此调度程序系统适用于Windows Phone 7.此提醒对象包含以下属性: 1)BeginTime,2)ExpirationTime,3)Title,4)Content,5)isSchedule and ohers
检索后,我需要DataBind它到ListBox。 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
});
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));
答案 0 :(得分:1)
您可以选择在Where
中传递谓词的项目,您可以将项目划分为不同类型的序列,但您可以(应该)不更改序列中的项目。
var results = yourSequence.Where(yourPredicate)
.Select(item => item.BeginDate.ToString("yourformat"));
在此示例中,lambda是Func<YourType, string>
,其中YourType
是序列中元素的类型,string
是表达式的输出。也就是说,它会在左侧YourType
上输入(item =>
)并在右侧string
上生成输出(item.BeginDate.ToString()
)。
这将为您提供IEnumerable<string>
,其中包含您选择的字符串格式的BeginDate
值。或者,您可以投射到另一种类型
var results = yourSequence.Select(item =>
new
{
DateString = item.BeginDate.ToString("yourformat"),
Foo = item.Foo,
Bar = item.Bar
});
这会为您提供IEnumerable<AnonymousType>
,然后您可以循环访问DateString
,Foo
和Bar
属性。当然,lambda将代表Func<YourType, AnonymousType>
。
答案 1 :(得分:1)
我认为你不太了解lambda是什么。在它的核心,一个lambda与(在你的情况下)
完全相同delegate bool FilterMyObject(MyObject)
bool WhereToday(MyObject obj) {
return obj.BeginTime.Date == Today
}
....
MyReminders = ScheduledActionService.GetActions().Where(new FilterMyObject(whereToday))
它将编译为非常相似的东西(除了它将使用泛型委托Func)。
现在,如果您使用的是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();
将输出格式化字符串数组