代码抛出无效的强制转换异常: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();

谢谢你的帮助!

代码抛出无效的强制转换异常:linq-sql连接两个表

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"])