在LINQ表达式中出现错误或将服务转换为客户端简单映射

本文关键字:转换 服务 客户端 映射 简单 表达式 LINQ 错误 | 更新日期: 2023-09-27 18:04:22

得到这个错误

"System.Linq.Enumerable+WhereSelectEnumerableIterator`2[Person.Models.IProfession,System.String]"

代码如下:我试图有一个集合的结果。服务返回我的集合,我认为,我需要迭代并存储为一个列表,将有该集合。请帮帮我

public class ProfessionResult
{
    public string Name { get; set; }
    public string ID{ get; set; }
}
public List<ProfessionResult> ProfessionResults
{
    get
    {
        var professionResults = new List<ProfessionResult>();
        professionResults.Add(new ProfessionResult()
        {
            Name = People?.Where(p => p.IsSelected)
                .Select(c => c.ProfessionResults.Select(n => n.Name))
                .ToString() ?? null,
            ID = People?.Where(p => p.IsSelected)
                .Select(c => c.ProfessionResults.Select(i => i.ID))
                .ToString() ?? null
        });
        return professionResults;
    }
}

在LINQ表达式中出现错误或将服务转换为客户端简单映射

一个基本的谷歌搜索你的部分错误消息显示这篇文章:Linq查询Xdocument返回"System.linq.Enumerable+WhereSelectEnumerableIterator'2[system.XML.Linq.Xelement,System.String]

根据它,

是的,那是因为你在查询上直接调用ToString()第二个和第三个值

基本上,不要在查询时调用ToString()。如果你想要单人间的话值,使用Single(), First()等。如果你想要多个值,迭代在他们之上,你可以轮流对他们做你想做的事,或者加入他们它们以适当的方式组合在一起。

这意味着您必须将值存储为初始格式,而不是在linq查询中对它们使用ToString()

*编辑* *

例如,您可以尝试:

Name = People?.Where(p => p.IsSelected).Select(c => c.ProfessionResults.Select(n => n.Name)).Single().ToString() ?? null,
ID = People?.Where(p => p.IsSelected).Select(c => c.ProfessionResults.Select( i => i.ID)).Single().ToString() ?? null

但是只有当您确定时,您将每次返回p => p.IsSelected的单个唯一记录

我还没有测试过,所以请告诉我它是否有效。