2011-08-01 18 views
6

tanımlanan öğelere referanslar içermektedir:sorgu birliği sonrasında aynı veritabanları 2 var dosya farklı bir veri bağlamında

var projectedP1 = P1.Select(x => new Project_test { 
            ID_inString = x.ID.ToString(), 
            col1 = x.col1, 
            col2 = x.col2, 
            col3 = x.col3 }); 
var union = projectedP1.Union(P2); 

yalnız P1 ya da tek başına P2, her şey yolunda olduğunda Ama 2 birlik olduğunda, Bunu çalışma zamanında aldım:

Sorgu, farklı bir veri bağlamında tanımlanan öğeler için başvurular içerir.

Bu benzer yazıyı denedim, ancak dun anlamak. Herhangi bir fikri olan var mı?

The specified LINQ expression contains references to queries that are associated with different contexts

+0

P1 ve P2'nin nasıl oluşturulduğunu bize göstermediniz. Muhtemelen farklı veri bağlamlarından geliyorlar. Aynı soruyu şu soruyu sorduğunuzu varsayalım: http://stackoverflow.com/questions/6884900/need-to-cast-explicitly-thru-anonymous-type-in-union - neden farklı kullanıyorsunuz? Kullanıcı hesabı? –

+0

evet, aynı kişi, çünkü kayıtlı olmadım. temelde P1 için veritabanı A kullanarak bir dbml (http://msdn.microsoft.com/en-us/library/bb399400.aspx) oluşturmak, B – gan

+0

Ah veritabanı kullanarak başka bir, onlar farklı * veritabanlarından olduklarını asla söylemediniz *. Temelde bunu SQL tarafında LINQ üzerinde yapamazsınız - bu bir UNION SQL sorgusuyla sonuçlanabilir değil mi? –

cevap

9

İki farklı bağlamlarda gelen nesneleri birleştiren asla; Sendika bir veritabanı sorgusunda derlendiği için, birden çok DB's desteklenmediğinden bunu nasıl uygulayacağını bilmez. Yapabileceğiniz en iyi şey, her sorguda ayrı ayrı ToList() öğesini çağırmaktır; bu, veritabanı sorgularını yürütür ve LINQ'dan Nesneler birliği yapar. Bu tamamen yinelenen bir süreçtir.

+6

ToList'i aramanıza gerek yok - sadece AsEnumerable şunları yapacak: 'P1.AsEnumerable(). Union (P2)'. –

+0

Bahşiş için teşekkürler ... Bunu P2'de de yapmak zorundasınız çünkü bunun içeriğine karşı uygulanması gerekirdi, değil mi? Sanırım ilk sonuç bağlamında idam edilmediği için ikinci sonuç olduğu için, iyi bir şekilde geçerdi ve sendikanın sorgusunun bir parçası olarak çevirmeyi denemeyecekti ... –

+1

Hayır, sizin P2'de yapın çünkü sadece P1'de yapmak, Enumerable içinde uygulamayı kullanacağınız anlamına gelir, P1'i zaten IEnumerable 'olarak ele alır. –

İlgili konular