Mas*_*ter 6 c# linq linq-to-entities
我有一个简单的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"
}));
Run Code Online (Sandbox Code Playgroud)
这将给我第一个客户名称,我试图让它出现前2名与会者后跟点.我试过这个
ClientNames = x.Attendees.Count == 1 ?
x.Attendees.FirstOrDefault().Person.CorrespondenceName :
x.Attendees.FirstOrDefault().Person.CorrespondenceName +
x.Attendees.Skip(1).FirstOrDefault().Person.CorrespondenceName + " ..."
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
只有LINQ to Entities中的排序输入才支持'Skip'方法.必须在方法'Skip'之前调用'OrderBy'方法.
您可以尝试先订购,如消息所示.
我不确定你的Attendees课程是什么样的,但假设它有一个ID字段:
x.Attendees.OrderBy(a => a.ID)
.Skip(1)
.Select(a => a.Person.CorrespondenceName).FirstOrDefault() + " ..."
Run Code Online (Sandbox Code Playgroud)
其他几点说明:
我换你Select和FirstOrDefault报表.你当前得到它的方式,如果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";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1267 次 |
| 最近记录: |