首页 新闻 会员 周边 捐助

LINQ TO SQL 本地序列问题

0
悬赏园豆:20 [已解决问题] 解决于 2015-07-31 11:53

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出来,这样是可以的。但效率低到无法接受(因为这个太大了,而且还会更大)。

谁有建议或办法吗?

cxwcdxw的主页 cxwcdxw | 初学一级 | 园豆:10
提问于:2015-07-31 11:22
< >
分享
最佳答案
0

 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是啥东西。

 

你尝试的方向是错的。应该是另外一个方向。

收获园豆:20
爱编程的大叔 | 高人七级 |园豆:30844 | 2015-07-31 11:26

对,你说的我看了官方教程后,大概懂了。

现在,我希望让dc.JxhYb(这个是数据库上的)通过Jxhyb类里面的元素dt 和Yksu 来匹配多个值,然后筛选出要的数据。

您有好的建议吗?

cxwcdxw | 园豆:10 (初学一级) | 2015-07-31 11:32

JxhYb的dt元素是datetime类型的,Yksu是string类型的。

dt是datetime数组

ys是string数组(和JxhYb里面的Yksu等长)

cxwcdxw | 园豆:10 (初学一级) | 2015-07-31 11:33

@cxwcdxw: 不能用JOIN,用Where Contains

比如这样

var query = from c in dc.Jxhyb

                  where dt.contains(c.dt)   

此处dt只要是IList类型的就可以了。

爱编程的大叔 | 园豆:30844 (高人七级) | 2015-07-31 11:55
其他回答(1)
0

居然被我自己解决了。

感谢万能的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);

 

希望也能帮到大家。

cxwcdxw | 园豆:10 (初学一级) | 2015-07-31 11:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册