无法转换';System.Collections.Generic.List<;长>';到';S

本文关键字:lt gt List Collections 转换 System Generic | 更新日期: 2023-09-27 17:59:27

使用带有LINQ查询的ObservableCollection从SQL Server数据库表中获取int时,我遇到了这个错误。假设返回一个4位数的整数,如3125

CS1503参数1:无法从转换'System.Collections.Generic.List<长?>'到'System.Collections.Generic.List<长>'

这怎么可能呢?它与List中的类型相同。

我的代码,

public static ObservableCollection<long> SearchNameComboStaffNo(DatabaseDataContext database, string staffNameFirst, string staffNameSecond)
        {
            return new ObservableCollection<long>
                   (database.Staff_Data_TBLs
                    .Where(staff => staff.Staff_Name_First == staffNameFirst &&                             
                     staff.Staff_Name_Second == staffNameSecond)
                    .Select(staff => staff.Staff_No).ToList());
        }

无论我尝试什么,我总是会遇到编译错误。但是,它怎么可能不能转换相同的类型呢?

无法转换';System.Collections.Generic.List<;长>';到';S

很可能,staff.Staff_No不是表中必需的列,因此它返回的是可为null的long,而不是long

如果要将其存储在long的列表中,请修改查询以给它一个默认值。

return new ObservableCollection<long>
       (database.Staff_Data_TBLs
                .Where(staff => staff.Staff_Name_First == staffNameFirst &&                             
                       staff.Staff_Name_Second == staffNameSecond)
                .Select(staff => staff.Staff_No ?? 0).ToList());

如果它是数据库中的int,并且需要将其存储在long的集合中,则需要首先对其进行转换,否则将出现类似于"无法从List<int>转换为List<long?>"的错误。

.Select(staff => (long)staff.Staff_No ?? 0).ToList());