You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# .Net中LINQ Where查询返回迭代器而非城市名的修复方法

问题原因

你写的LINQ查询from s in cities where s.Id == item.CityId select s.name返回的是IEnumerable<string>类型的延迟执行迭代器,不会直接输出匹配到的城市名称。直接对迭代器对象调用.ToString()时,默认会返回该对象的类型全名字符串,也就是你看到的System.Linq.Enumerable+WhereSelectListIterator开头的异常输出。

修复方案

你需要在LINQ查询后追加单值取值方法,拿到匹配到的单个城市名称即可。由于人员的CityId理论上只会对应0或1个城市,推荐使用FirstOrDefault()方法:

  • 直接替换原有错误的Şehir字段赋值逻辑即可:
Şehir = cities.FirstOrDefault(s => s.Id == item.CityId)?.name ?? string.Empty

这里用null条件运算符?.做了空值处理,如果没有匹配到对应Id的城市,会返回空字符串,避免抛出空引用异常。

  • 如果你更习惯使用查询语法,也可以写成:
Şehir = (from s in cities where s.Id == item.CityId select s.name).FirstOrDefault() ?? string.Empty
修复后的完整方法代码
public List<PersonelDto> MapPersonelDto(List<Personel> personels,List<City> cities)
{
    var result = new List<PersonelDto>();

    foreach (var item in personels)
    {
        var personel = new PersonelDto
        {
            Id = item.Id,
            Maaş = item.Salary,
            MedeniHal = item.MartialStatus,
            Meslek = item.Job,
            Soyisim = item.LastName,
            Şehir = cities.FirstOrDefault(s => s.Id == item.CityId)?.name ?? string.Empty
        };
        result.Add(personel);
    }

    return result;
}

性能优化参考:如果人员列表数据量较大,可以提前把城市列表转成以Id为Key的字典,把每次循环的线性查找复杂度从O(n)降到O(1),执行效率会更高:

public List<PersonelDto> MapPersonelDto(List<Personel> personels,List<City> cities)
{
    // 提前构建城市Id-名称映射字典
    var cityDict = cities.ToDictionary(c => c.Id, c => c.name);
    var result = new List<PersonelDto>();
    foreach (var item in personels)
    {
        var personel = new PersonelDto
        {
            Id = item.Id,
            Maaş = item.Salary,
            MedeniHal = item.MartialStatus,
            Meslek = item.Job,
            Soyisim = item.LastName,
            // 直接从字典取值,匹配不到则返回空字符串
            Şehir = cityDict.TryGetValue(item.CityId, out var cityName) ? cityName : string.Empty
        };
        result.Add(personel);
    }
    return result;
}

内容的提问来源于stack exchange,提问作者Kaan Alp Elpe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:03:23