创建一个包含LINQ查询的类?

时间:2016-06-30 15:04:39

标签: c# linq

这个问题是这个问题的延续,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?)

2 个答案:

答案 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);
        }