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)
与其他人一起。
答案 0 :(得分:1)
匿名类型transactions
和cases
是相同的。匿名类型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>)