2011-02-11 56 views
6
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(); 

考慮到上面的代碼,以下將工作如何轉換Linq.ParallelQuery到Linq.IQueryable

transactions.Union(cases); 

但是以下將無法正常工作

transactions.Union(interactions); 

由於交易和案件都正在返回Linq.IQueryable,但最後一個是Linq.ParallelQuery,因爲它加入了另一個表。

我需要這個功能基本上使聯盟。 interactions.Union(transactions)transactions.Union(interactions)一個與其他。

+0

您嘗試過互動嗎?聯盟(交易),它應該工作 – 2011-02-11 19:43:50

+0

@KIvanov不幸的是它不工作。 – Elangesh 2011-02-11 19:47:04

回答

1

我這個問題的答案可能是不正確的,但是我primarly提出了這個問題,以下問題。 LINQ to Entities Union is throwing an error

我從diceguyd30發現了一個奇妙的答覆,它解決了我的問題。因此,我正在回答這個問題,以迴應我以前的問題的答案。

0
interactions.Union(transactions.AsEnumerable()); 

由於第一參數應工作是IQueryable,第二個是IEnumerable

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

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

所以解決方案是select的方式,使匿名類型相同。因此,要麼創建自己的類型,要麼將選擇產品的屬性轉換爲相同的類型。

像這樣的東西應該產生相同的匿名類型所有的選擇:

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