C# 如果计数超过0,则选择中的Linq OrderBy

C# 如果计数超过0,则选择中的Linq OrderBy,c#,linq,entity-framework,C#,Linq,Entity Framework,我有一个如下的查询: 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,

我有一个如下的查询:

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
   };
select中的最后一个字段是字符串属性,我需要知道如果
x.ContactsActivities
大于0,则取结果,否则取字符串为空


如果我运行此命令,将返回一个无法orderby null的错误。

听起来您可能只需要:

Note = x.ContactsActivities
        .OrderByDescending(o => o.date)
        .Select(o => o.note)
        .FirstOrDefault() ?? "";
通过将投影放在前面,这意味着您最终会得到来自
FirstOrDefault
的空结果作为最终结果,而不是尝试取消引用结果以从空引用中获取注释


空合并运算符然后将
null
值转换为空字符串。请注意,这意味着即使有结果,如果其
Note
属性恰好有空值,也会得到一个空字符串。

听起来您可能只是想要:

Note = x.ContactsActivities
        .OrderByDescending(o => o.date)
        .Select(o => o.note)
        .FirstOrDefault() ?? "";
通过将投影放在前面,这意味着您最终会得到来自
FirstOrDefault
的空结果作为最终结果,而不是尝试取消引用结果以从空引用中获取注释


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

你说的“超过0”是什么意思?非空?你说的“超过0”是什么意思?非空?太完美了!非常感谢。太完美了!非常感谢。