无法将'System.Collections.Generic.List <long?>'转换为'System.Collections.Generic.List <long>

时间:2016-07-30 11:30:24

标签: c# linq

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

  

CS1503参数1:无法转换   'System.Collections.Generic.List&LT;长&GT;'至   'System.Collections.Generic.List&LT;长&GT;'

这怎么可能?它与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());
        }

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

1 个答案:

答案 0 :(得分:2)

最有可能的是,staff.Staff_No不是表格中的必填列,因此它返回的是可空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&lt; int&gt;转换为List&lt; long?&gt;”。

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