Linq 存储库模式“指定的强制转换无效”错误
Posted
技术标签:
【中文标题】Linq 存储库模式“指定的强制转换无效”错误【英文标题】:Linq Repository pattern "Specified cast is not valid" Error 【发布时间】:2009-08-11 01:10:41 【问题描述】:我有以下课程(我已经修剪了代码):
public class SqlWeightTrackerRepository : IWeightTrackerRepository
private Table<WeightTracker> m_weightTrackerTable;
//... constructor + other code here
public IQueryable<WeightTracker> WeightTracker
get return m_weightTrackerTable;
//导致错误的代码
[忽略此行 ->] private IMembersRepository m_membersRepository = new SqlWeightTrackerRepository(); [我很累,添加不正确]
私有 IWeightTrackerRepository m_weightTrackerRepository = new SqlWeightTrackerRepository();
//...一些其他代码
if (report.PreviousWeightTrackerId == 0)
try //If no session was found try find an entry in the database
var tmp =
(from x
in m_weightTrackerRepository.WeightTracker
where x.MemberId == report.Member.MemberId
orderby x.Created_On descending
select x).First();
catch (Exception e)
//堆栈跟踪
在 System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,QueryInfo queryInfo,IObjectReaderFactory 工厂,Object[] parentArgs,Object[] userArgs,ICompiledSubQuery[] subQueries,Object lastResult)
在 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(表达式查询,QueryInfo[] queryInfos,IObjectReaderFactory 工厂,Object[] userArguments,ICompiledSubQuery[] subQueries)
在 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(表达式查询)
在 System.Data.Linq.DataQuery1.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.First[TSource](IQueryable
1 来源)
在 D:\PROJECTS\3DData\LoseOnlyToday\WebUI\Controllers\MembersController.cs:line 59' 中的 WebUI.Controllers.MembersController.Welcome() 处
此代码给出异常“指定的强制转换无效”
我知道查询有效——我使用 scott gu 的 linq 调试器来检查它——它返回 3 行... (调试器:http://weblogs.asp.net/scottgu/archive/2007/07/31/linq-to-sql-debug-visualizer.aspx)
我完全失败了......一直在谷歌上寻找几个小时的解决方案。发布这是最后的手段。 有人可以帮忙吗?将不胜感激!
【问题讨论】:
【参考方案1】:SqlWeightTrackerRepository 实现了 IWeightTrackerRepository,但您试图将其转换为 IMembersRepository(w/“IMembersRepository m_membersRepository”)。
变化:
private IMembersRepository m_membersRepository = new SqlWeightTrackerRepository();
到:
private IWeightTrackerRepository m_membersRepository = new SqlWeightTrackerRepository();
你会是金色的。
【讨论】:
没有问题 - 确保标记正确答案,以便其他人受益。以上是关于Linq 存储库模式“指定的强制转换无效”错误的主要内容,如果未能解决你的问题,请参考以下文章
System.InvalidCastException:指定的强制转换无效。错误
尝试在 C# 中迭代 IEnumerable<int> 时,指定的强制转换无效
Xamarin 形式:System.InvalidCastException:“指定的强制转换无效。”
在OptionSet属性的FetchXML查询中,System.InvalidCastException(“指定的强制转换无效。”)