这个问题是这个问题的延续,How to bind a variable with multiple types? LINQ
我正在尝试选择一行包含30列的数据,条件是Staff_No
列中的唯一值。该行有几种数据类型。
我无法正确理解语法,这就是代码。
internal class DatabaseQueries
{
public static IEnumerable<int> ModValues(DatabaseDataContext database, int staffNo)
{
return database.Staff_Mod_TBLs
.Where(staff => staff.Staff_No == staffNo).Cast<int>().ToList();
}
}
错误为InvalidOperationException Class。
这段代码给了我这个错误,
public static IEnumerable<decimal> ModValues(DatabaseDataContext database, int staffNo)
{
return database.Staff_Mod_TBLs
.Where(staff => staff.Staff_No == staffNo).Select(staff => staff.Days_No_D).ToList();
}
错误Severity Code Description Project File Line Suppression State Error CS0266 Cannot implicitly convert type 'System.Collections.Generic.List<decimal?>' to 'System.Collections.Generic.IEnumerable<decimal>'. An explicit conversion exists (are you missing a cast?)
答案 0 :(得分:4)
我正在尝试选择一行 [并在评论中......]
我试图获得具有多种数据类型的整行。
然后您不需要Cast()
或ToList()
。如果您想要一条记录,只需获取该匹配记录:
return database.Staff_Mod_TBLs
.Single(staff => staff.Staff_No == staffNo);
或者,如果你想返回null
而不是在没有匹配时抛出错误:
return database.Staff_Mod_TBLs
.SingleOrDefault(staff => staff.Staff_No == staffNo)
然后当然你需要改变方法的返回类型:
public static Staff_Mod_TBL ModValues(...)
(假设类型名称基于表名。如果不同,则根据需要替换。)
基本上,您要查找的是对象的一个实例,它表示该表中的记录。不是列值的集合。
答案 1 :(得分:1)
我认为你不能将Staff_Mod_TBLs
投放到int
,这是无效的
你真的在这里混合:
.Cast<int>
将每个元素转换为int
。
如果要基于过滤器返回整个对象:
public static Staff_Mod_TBLs ModValues(DatabaseDataContext database, int staffNo)
{
return database.Staff_Mod_TBLs
.FirstOrDefault(staff => staff.Staff_No == staffNo);
}