我有一个下拉列表,我想用数据库中的五个字段填充。
我正在使用Entity framework 6
和lambda/linq
。
我有两个问题。
目前我的代码看起来像这样。
var query = db.tblActivityReports.Where(ap => ap.Deleted == false)
.Select(a => new
{
activity = a.tblRegion.Name != "" ? a.tblRegion.Name : string.Empty + " " +
a.tblStore.Name != "" ? a.tblStore.Name : string.Empty + " " +
a.Location != "" ? a.Location : string.Empty,
activityId = a.ActivityReportId,
participant = a.tblActivityParticipants
});
如果我添加日期字段,我会收到此错误:
"Unable to cast the type 'System.DateTime' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types."
答案 0 :(得分:1)
我建议你从数据库中获取所需的数据,然后在客户端进行数据格式化 - 实际上在数据库上格式化UI的字符串并不是一个好主意。因此,在加载所有必需的数据后,您将能够使用String.Format并将DateTime转换为string:
db.tblActivityReports
.Where(ar => !ar.Deleted)
.Select(ar => new {
RegionName = ar.tblRegion.Name,
StoreName = (ar.tblStore == null ? null : ar.tblStore.Name),
ar.Location,
ar.ActivityDate,
ActivityId = ar.ActivityReportId,
Participants = ar.tblActivityParticipants
})
.AsEnumerable() // move query to memory
.Select(x => new {
Activity = String.Format("{0}{1}{2}{3}",
x.RegionName, x.StoreName, x.Location, x.ActivityDate),
x.ActivityId,
x.Participants
});
您甚至可以将结果映射到某些ViewModel,后者将负责返回格式化字符串。
提示:如果你想要与空格连接的值,那么你可以使用String.Join而不是格式化:
Activity = String.Join(" ",
(new object[] { x.RegionName, x.StoreName, x.Location, x.ActivityDate })
.Where(o => o != null))