Как преобразовать Linq.ParallelQuery в Linq.IQueryable - PullRequest
6 голосов
/ 11 февраля 2011
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 из-за соединения с другой таблицей.

Мне нужен этот функционал в основном для создания Union. interactions.Union(transactions) или transactions.Union(interactions) друг с другом.

Ответы [ 3 ]

1 голос
/ 12 февраля 2011

Анонимный тип transactions и cases одинаков.Анонимный тип interactions это другой !

Таким образом, решение заключается в select таким образом, чтобы анонимные типы были одинаковыми.Так что либо создайте свой собственный тип, либо преобразуйте свойства выбранного продукта в тот же тип.

Что-то вроде этого должно создать одинаковый анонимный тип для всех селектов:

select new { ParticipationId = (int)c1.Key, CreateDateTime = (DateTime)c1.Max() }
1 голос
/ 16 февраля 2011

Мой ответ на этот вопрос может быть неправильным, однако я поднял этот вопрос главным образом для следующей проблемы. LINQ to Entities Union выдает ошибку .

Я нашел фантастический ответ от diceguyd30 , и он решил мою проблему.Поэтому я закрываю этот вопрос в ответ на ответ на мой предыдущий вопрос.

0 голосов
/ 11 февраля 2011
interactions.Union(transactions.AsEnumerable());

, который должен работать, так как первый параметр - IQueryable, а второй - IEnumerable

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