如何将Linq.ParallelQuery转换为Linq.IQueryable

时间:2011-02-11 19:38:26

标签: c# linq entity-framework linq-to-entities linq-to-objects

var transactions = from t in context.Transactions
                               group t.Create_Date_Time by t.Participation_Id
                                   into t1
                                   select new { ParticipationId = t1.Key, CreateDateTime = t1.Max() };

            var cases = from c in context.Cases
                        group c.Create_Date_Time by c.Participation_Id
                            into c1
                            select new { ParticipationId = c1.Key, CreateDateTime = c1.Max() };

            var interactions = (from i in context.Interactions
                               join pp in context.Party_Participation on i.Party_Id equals pp.Party_Id
                               group i.Last_Update_Date_Time.HasValue ? i.Last_Update_Date_Time : i.Create_Date_Time by
                                   pp.Participation_Id
                               into i1
                               select new {ParticipationId = i1.Key, CreateDateTime = i1.Max()}).AsQueryable();

考虑到上面的代码,以下代码将起作用

transactions.Union(cases);

然而,以下操作不起作用

transactions.Union(interactions);

因为事务和案例都返回Linq.IQueryable,但最后一个是Linq.ParallelQuery,因为它与另一个表连接。

我基本上需要这个功能来制作联盟。 interactions.Union(transactions)transactions.Union(interactions)与其他人一起。

3 个答案:

答案 0 :(得分:1)

匿名类型transactionscases是相同的。匿名类型interactions 不同

所以解决方案是select以一种使匿名类型相同的方式。因此,要么创建自己的类型,要么将选择产品的属性转换为相同的类型。

这样的事情应该为所有选择产生相同的匿名类型:

select new { ParticipationId = (int)c1.Key, CreateDateTime = (DateTime)c1.Max() }

答案 1 :(得分:1)

我对这个问题的回答可能不正确,但我主要针对以下问题提出了这个问题。 LINQ to Entities Union is throwing an error

我发现了diceguyd30的精彩回复,这解决了我的问题。因此,我在回答上一个问题的答案时正在结束这个问题。

答案 2 :(得分:0)

interactions.Union(transactions.AsEnumerable());

应该有效,因为第一个参数是IQueryable,第二个参数是IEnumerable

Queryable.Union<TSource> Method (IQueryable<TSource>, IEnumerable<TSource>)