using (DataClasses1DataContext dc = new DataClasses1DataContext())
{
var ksjk =
from kk in dc.JxhYb
join dt1 in dt on kk.dt equals dt1
join ys1 in ys on kk.Yksu equals ys1.Mnzi
ksjk2 = ksjk.ToArray();
}
dc是LINQ TO SQL中的一个数据库,dt是datetime[]数组,ys是另外一个string[]数组。
运行以后提示这个:
“System.NotSupportedException”类型的未经处理的异常在 System.Data.Linq.dll 中发生
其他信息: 不能在查询运算符(Contains 运算符除外)的 LINQ to SQL 实现中使用本地序列。
我看了下LINQ TO SQL官方教程,from 和 join 的来源都是dc.***。我想这样的话,可能linq to sql比较好转化一点。
我尝试先把dc.JxhYb select出来,这样是可以的。但效率低到无法接受(因为这个太大了,而且还会更大)。
谁有建议或办法吗?
var ksjk =
from kk in dc.JxhYb
join dt1 in dt on kk.dt equals dt1
join ys1 in ys on kk.Yksu equals ys1.Mnzi
错在join dt1 in dt 和 join ys1 in ys
这两个不在数据库上,而是在你本地,
而LINQ是需要转化为一个可以在数据库上运行的SQL语句。
这样说不知道够不够清楚。不够清楚的话,请你先说清楚一些dt 和ys是啥东西。
你尝试的方向是错的。应该是另外一个方向。
对,你说的我看了官方教程后,大概懂了。
现在,我希望让dc.JxhYb(这个是数据库上的)通过Jxhyb类里面的元素dt 和Yksu 来匹配多个值,然后筛选出要的数据。
您有好的建议吗?
JxhYb的dt元素是datetime类型的,Yksu是string类型的。
dt是datetime数组
ys是string数组(和JxhYb里面的Yksu等长)
@cxwcdxw: 不能用JOIN,用Where Contains
比如这样
var query = from c in dc.Jxhyb
where dt.contains(c.dt)
此处dt只要是IList类型的就可以了。
居然被我自己解决了。
感谢万能的VS或者Resharper,我用了3个大for循环,它帮我改成这样了。
ksjk2.AddRange(from dt1 in dt from vd1 in vd from ys1 in ys from vv in (from kk in dc.JxhYb where kk.dt == dt1 && kk.Vjdm == vd1.Mnzi && kk.Yksu == ys1.Mnzi select kk) select vv);
希望也能帮到大家。