我是sql-linq的新手,我试图使用他们的共同ID(即MOTHERID)加入两个表。但是下面的代码抛出了一个"无效的强制转换异常"于:
var firstQuery =(from _maternalvisitvaluedb.Value select 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();
感谢您的帮助!
答案 0 :(得分:1)
s不是DateTime类型,从查询中删除您的强制转换,并且应该修复它。
更改
where (DateTime)s.SecondVisit.Date == DateTime.Now.Date
到
where s.SecondVisit.Date == DateTime.Now.Date
答案 1 :(得分:0)
你可以使用
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();
答案 2 :(得分:0)
下面的代码抛出了一个&#34;无效的强制转换异常&#34;一开始 线。
您似乎没有从数据库中选择正确的表格&#39; _maternalvisitvaluedb&#39; ,这是一个错误。
&#39; _maternalvisitvaluedb.Value&#39; 看起来像数据库的属性,不是数据库中的表。验证它是否是一张桌子。
答案 3 :(得分:0)
您可以尝试使用Equals()
代替(可接受可为空的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中执行 join 并在Linq-to-objects中执行过滤器
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();
答案 4 :(得分:0)
我知道原来的问题已经得到了回答,但是如果有其他人碰到这个问题......我会永远花在这上面并通过改变解决它
on (Int64)table1["myField"] equals (Int64)table2["myField"]
到
on Convert.ToInt64(table1["myField"]) equals Convert.ToInt64(table2["myField"])