gpt4 book ai didi

c# - 如何获得SecondOrDefault?

转载 作者:太空狗 更新时间:2023-10-29 21:22:27 28 4
gpt4 key购买 nike

我有一个简单的 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 + " ..."

但是我得到这个错误:

The method 'Skip' is only supported for sorted input in LINQ to Entities. The method 'OrderBy' must be called before the method 'Skip'.

最佳答案

您可以按照消息提示先尝试订购。

我不确定您的 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";

关于c# - 如何获得SecondOrDefault?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23573803/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com