C# 不存在值上的C Linq实体转换错误?

C# 不存在值上的C Linq实体转换错误?,c#,linq,C#,Linq,在尝试使用Linq实体框架查询某些数据时,我收到以下异常: {"Conversion failed when converting the varchar value '3208,7' to data type int."} 令人困惑的是,这个值甚至不存在于我查询的视图中。但是,它确实存在于视图所基于的表中。我正在运行的查询如下所示: return context.vb_audit_department .Where(x => x.department_i

在尝试使用Linq实体框架查询某些数据时,我收到以下异常:

{"Conversion failed when converting the varchar value '3208,7' to data type int."}
令人困惑的是,这个值甚至不存在于我查询的视图中。但是,它确实存在于视图所基于的表中。我正在运行的查询如下所示:

return context.vb_audit_department
                .Where(x => x.department_id == department_id && x.version_id == version_id)
                .GroupBy(x => new { x.action_date, x.change_type, x.user_ntid, x.label })
                .Select(x => new
                {
                    action_date = x.Key.action_date,
                    change_type = x.Key.change_type,
                    user_ntid = x.Key.user_ntid,
                    label = x.Key.label,
                    count = x.Count(),
                    items = x
                })
                .OrderByDescending(x => x.action_date)
                .Skip(startRowIndex)
                .Take(maximumRows)
                .ToList();  

有人能解释为什么LINQ查询底层表而不是实际视图吗,在回答最后一个问题之前,我们需要更多地了解linq查询正在执行的上下文,以及EF或LinqToSql如何定义映射。

linq到SQL/EF不查询基础表而不是查询视图。它不知道这些信息

该错误来自SQL Server本身。看起来该视图可能是由某些行的转换失败而定义的。完全有可能以这种方式定义一个视图,这样,当您尝试从中选择时,它只会失败,并且您将收到确切的错误消息

证明:

CREATE TABLE Test
(
    Value varchar(50)
)

INSERT Test (Value) VALUES ('1')

CREATE VIEW TestView AS
    SELECT CAST(Value AS int) AS Value
    FROM Test

SELECT * FROM TestView    -- Succeeds

INSERT Test (Value) VALUES ('Some String')

SELECT * FROM TestView    -- Will fail with your error message
因此,同样,如果您确定这个坏值根本不应该出现在视图中,那么问题很可能出在视图本身。或者EF映射错误,即为其中一列定义了错误的类型。这也可能导致该错误,因为EF将插入强制转换