【发布时间】:2017-06-09 16:22:37
【问题描述】:
我的代码如下:
IEnumerable<Booking> Bookings = _repoBooking.GetAll.OrderBy(d => d.BookingDateTime).ToList();
return Json(listErrorMsg(Bookings.Select(a => new
{
bookingId = a.BookingId,
bookingDateTime = a.BookingDateTime,
jobType = a.JobType,
bookingStatus = a.BookingStatus,
projectId = a.ProjectId,
clientId = a.ClientId,
clientEmail = _userManagerService.FindByIdAsync(a.ClientId).Result.Email
})));
正确的 JSON 对象如下所示:
{
"bookingId": 7016,
"bookingDateTime": "2017-06-13T17:00:00",
"jobType": "Quote",
"bookingStatus": "Pending",
"projectId": 343,
"clientId": "01d85u46-b753-8635-ba3b-a6458cbv2425",
"clientEmail": "fake@fakemail.com"
}
但是,我遇到的问题是,如果 ClientId 为空,它会返回错误,因为 FindByIdAsync 正在使用空对象进行搜索。
如果 clientId != null 或仅返回“”,我将如何对其进行过滤以仅使用 FindByIdAsync 方法(如果是)。
我应该创建 2 个单独的选择语句并加入它们吗?
我几乎在所有地方都放置了 Where 子句,而 if 语句由于显而易见的原因无法正常工作。感谢您提前提供任何帮助。
【问题讨论】:
-
你为什么要创建一个新的匿名对象来序列化?为什么不等待
_userManagerService.FindByIdAsync(a.ClientId)的结果@ -
为什么不在自定义上下文中创建一个用户表并将电子邮件存储在那里?然后您可以使用普通的 Id (int) 并将您的表格与该表格相关联。这将使事情变得容易得多。有两个单独的上下文:标识用户的身份上下文和您的业务信息的自定义上下文。保持两个上下文分开。如果做得好,除了登录时,您将不需要身份上下文。因为您需要的信息应该在您的自定义上下文中(因此您只需要一个查询)并且对于当前用户,您可以使用带有附加信息的声明。
标签: c# json entity-framework asp.net-core asp.net-identity