LINQ 匿名对象选择属性(如果不为空)



我正在循环浏览公司列表,并使用以下 linq 查询创建一个匿名对象,以检索我想要的数据。

查询如下所示:

var customMail = this.db.Companies.Where(c => c.Id == company.Id)
                                     .Select(x => new { x.FromMail, x.FromName, x.Subject, x.EmailBody })

此对象以列表形式正确填充,其中包含一个包含正确详细信息的结果。但有时一个字段包含null如何过滤掉这些空值?

我尝试了以下方法但没有成功:

var customMail = this.db.Companies.Where(c => c.Id == company.Id)
                                     .Select(x => new { x.FromMail, x.FromName, x.Subject, x.EmailBody })
                                     .Select(a => a.GetType().GetProperties()
                                                  .Where(pi => pi.GetValue(a) != null)
                                                  .Select(pi => pi.GetValue(a)));

我很想获取没有空值的对象,然后在方法中使用其值。

如果要过滤掉任何属性设置为 null 的对象,可以这样做:

var customMail = this.db.Companies.Where(c => c.Id == company.Id)
    .Select(x => new { x.FromMail, x.FromName, x.Subject, x.EmailBody })
    .AsEnumerable() // Now you can use reflection
    .Where(
        a => a.GetType().GetProperties().All(pi => pi.GetValue(a) != null)
    );

这将生成一个匿名对象列表,其中所有属性都设置为非 null 值。

相关内容

  • 没有找到相关文章

最新更新