如果 FindByIdAsync, Id 为空怎么办



我的代码看起来像:

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 正在使用空对象进行搜索。

我将如何过滤它以仅使用 FindByIdAsync 方法,如果 clientId != null 或只是返回" ",如果是的话。

我应该创建 2 个单独的 select 语句并连接它们吗?

我几乎在任何地方都放了 Where 子句,由于显而易见的原因,if 语句不起作用。提前感谢您的任何帮助。

对于

Bookings集合中包含的每个唯一clientId值,您那里的内容将访问数据库一次。如果它是一个小集合,这将不是问题,但一旦它增长,它就会变得非常低效。更好的解决方案是根据集合中找到的客户端 ID 获取所有用户的电子邮件地址。

var Bookings = _repoBooking.GetAll.OrderBy(d => d.BookingDateTime).ToList();
var clientIds = Bookings.Where(x => x.ClientId != null).Select(x => x.ClientId).ToList();
var emailLookup = _userManagerService.Users.Where(user => clientIds.Contains(user.Id)).ToDictionary(x => x.Id, x => x.Email);

将行clientEmail =...替换为

clientEmail = a.ClientId != null ? emailLookup[a.ClientId] : ""

现在,您只有 2 个数据库调用,一个用于获取预订,另一个用于获取电子邮件地址列表。如果您修改Booking关系以包含对User的引用,则可以更进一步将其减少到一个调用。

尝试:clientEmail = a.ClientId == null ?" : _userManagerService.FindByIdAsync(a.ClientId(.Result.Email

相关内容

  • 没有找到相关文章

最新更新