0

我有一个看起来像这样的查询:

var qContactsOpen = from x in promo.Contacts
   where x.type == type && (x.closure_id == 0 || x.closure_id == null)
   orderby x.id descending
   select new ContactsGrid
   {
      Id = x.id,
      DescriptionA = x.description_A,
      Address = x.address,
      PostalCode = x.postal_code,
      Vat = x.vat_iva,
      CategoryDescription = x.Categories.description,
      SpecializationDescription = x.Specializations.description,
      AreaDescription = x.Areas.description,
      Location = x.location,
      Subject = x.subject,
      Note = x.ContactsActivities.OrderByDescending(o=>o.date).FirstOrDefault().note
   };

选择中的最后一个字段是一个字符串属性,我需要如果x.ContactsActivities大于0,则取结果,否则将字符串取空。

如果我运行它,将返回一个错误,它不能按 null 排序。

4

1 回答 1

4

听起来您可能只想:

Note = x.ContactsActivities
        .OrderByDescending(o => o.date)
        .Select(o => o.note)
        .FirstOrDefault() ?? "";

通过将投影放在更早的位置,这意味着您最终会得到 null 结果FirstOrDefault作为最终结果,而不是尝试取消引用结果以从 null 引用中获取注释。

然后,null 合并运算符会将null值转换为空字符串。请注意,这意味着即使有结果,如果它的属性碰巧有一个空值,您也会得到一个字符串note

于 2013-10-02T16:55:46.390 回答