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

时间:2014-09-17 12:49:48

标签: c# sql linq

我是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();

感谢您的帮助!

5 个答案:

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