如何获取Second或Default? [英] How to get SecondOrDefault?

查看:63
本文介绍了如何获取Second或Default?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个简单的Linq lambda语句

Interactions = new BindableCollection<InteractionDTO>(ctx.Interactions.Where(x => x.ActivityDate > DateTime.Today)
   .Select(x => new InteractionDTO
   {
       Id = x.Id,
       ActivityDate = x.ActivityDate,
       subject = x.Subject,
       ClientNames = x.Attendees.Count == 1 ? x.Attendees.FirstOrDefault().Person.CorrespondenceName :
       x.Attendees.FirstOrDefault().Person.CorrespondenceName : "Multiple attendees"
    }));

这将为我提供第一个客户名称,我正在尝试让它出现在前2个出席者后面,后跟圆点。我试过这个

ClientNames = x.Attendees.Count == 1 ? 
             x.Attendees.FirstOrDefault().Person.CorrespondenceName :
             x.Attendees.FirstOrDefault().Person.CorrespondenceName +
             x.Attendees.Skip(1).FirstOrDefault().Person.CorrespondenceName + " ..."

但我收到此错误:

仅LINQ to Entities中的排序输入支持方法"Skip"。必须在方法"Skip"之前调用方法"OrderBy"。

推荐答案

您可以按照消息建议先尝试订购。

我不确定您的Attendees类是什么样子,但假设它有一个ID字段:

x.Attendees.OrderBy(a => a.ID)
           .Skip(1)
           .Select(a => a.Person.CorrespondenceName).FirstOrDefault() + " ..."

其他几个注意事项:

我交换了您的SelectFirstOrDefault语句。按照您当前获取的方式,如果FirstOrDefault()返回NULL,则Person.CorrespondenceName将引发异常。

但是现在如果没有找到记录,您最终只会得到"..."。您可能需要将第一个Where子句调整为过滤输出没有对应名称的记录,然后将FirstOrDefault()更改为First()


编辑:

这应该会指引您朝着正确的方向(我希望)。假设它实际上可以转换为有效的SQL语句,那么它可能更符合您的要求:

ClientNames = x.Attendees.Any()
                  ? x.Attendees.Count == 1
                      ? x.Attendees.Select(a => a.Person.CorrespondenceName).FirstOrDefault()
                      : x.Attendees.Count == 2
                          ? string.Join(", ", x.Attendees.OrderBy(a => a.ID).Take(2)
                                                         .Select(a => a.Person.CorrespondenceName).FirstOrDefault()
                          : string.Join(", ", x.Attendees.OrderBy(a => a.ID).Take(2)
                                                         .Select(a => a.Person.CorrespondenceName).FirstOrDefault() + " ..."
                  : "No client name available";

这篇关于如何获取Second或Default?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆