代码抛出无效的强制转换异常:linq-sql连接两个表
本文关键字:连接 linq-sql 两个 异常 无效 转换 代码 | 更新日期: 2023-09-27 18:22:08
我是sqllinq的新手,我正在尝试使用两个表的公共id(MOTHERID)来连接它们。但是下面的代码正在向抛出一个"无效强制转换异常"
var firstQuery=(从_maternalvisitvaluedb.Value选择s).ToList();
整个代码看起来像:
var firstQuery = (from s in _maternalvisitvaluedb.Value select s).ToList();
var secondQuery = (from t in _maternalcarevaluedb.Value select t).ToList();
var result = (from s in firstQuery
join k in secondQuery
on s.MotherId equals k.MotherId
where (DateTime)s.SecondVisit.Date == DateTime.Now.Date
select s).ToList();
谢谢你的帮助!
s的类型不是DateTime,请从查询中删除您的强制转换,这样应该可以修复它。
更改
where (DateTime)s.SecondVisit.Date == DateTime.Now.Date
至
where s.SecondVisit.Date == DateTime.Now.Date
您可以使用
var result = (from s in firstQuery
join k in secondQuery
on s.MotherId equals k.MotherId
where DateTime.Compare(s.SecondVisit.Date, DateTime.Now.Date)<=0
select s).ToList();
下面的代码在第一个线
您似乎没有从数据库中选择正确的表'_maternalvisitvaluedb',这会导致错误。
'_maternalvisitvaluedb.Value'看起来像数据库的属性,而不是数据库中的表。验证它是否为表。
您可以尝试使用Equals()
(它将接受可为null的DateTime
值)
var result = (from s in firstQuery
join k in secondQuery
on s.MotherId equals k.MotherId
where DateTime.Now.Date.Equals(s.SecondVisit.Date)
select s).ToList();
还要注意,您正在将这两个表加载到内存中。如果不执行中间查询,则可能能够在SQL中执行查询:
var result = (from s in _maternalvisitvaluedb.Value
join k in _maternalcarevaluedb.Value
on s.MotherId equals k.MotherId
where DateTime.Now.Date.Equals(s.SecondVisit.Date)
select s)
.ToList();
折衷方案是在SQL中执行联接,并在Linq中对对象进行筛选
var result = (from s in _maternalvisitvaluedb.Value
join k in _maternalcarevaluedb.Value
on s.MotherId equals k.MotherId
select new {s, k})
.Where(sk => DateTime.Now.Date.Equals(s.SecondVisit.Date)
.Select(sk => sk.s).ToList();
我知道原来的问题已经回答了,但万一其他人碰到这个。。。我花了很长时间在这上面,并通过更改解决了它
on (Int64)table1["myField"] equals (Int64)table2["myField"]
至
on Convert.ToInt64(table1["myField"]) equals Convert.ToInt64(table2["myField"])