/ / Ляв Външен Присъединяване в Linq-To-Entities - entity-framework, linq-to-entities, left-join

Ляво външно присъединяване към Linq-към-Entities - entity-framework, linq-to-entities, left-join

Има ли начин да направите ляво външно свързване в линк-към-обектите, без да имате таблици, картографирани с чужди ключове?

Също така, ако нашата компания реши да се придържаме към използванетоlinq-to-entities, въпреки всички текущи недостатъци, смятате ли, че е важно да получите Visual Studio 2010? С други думи, какво е в Visual Studio 2010, което ще помогне за разработването на обекти, които не са в Visual Studio 2008?

Благодаря.

Отговори:

1 за отговор № 1

Това може да не ви задоволи, защото обектите не са правилно сплескани, но можете да извършите външна връзка и да върнете колекция от анонимни типове.

Лявата външна връзка е същата като съединението на вътрешната връзка и с изключение на комплекта (частта от първия комплект, която не се свързва към втория комплект).

Тук просто

  • изчислете вътрешната връзка
  • изчислявате с изключение на комплекта (създаване на празна Б обект, за да сте сигурни, че типовете са последователни)
  • комбинирайте двата комплекта.

LINQ не е красива, но е сладка.

class A
{
public int Id { get; set; }
public string PropertyA { get; set; }
}

class B
{
public int Id { get; set; }
public string PropertyB { get; set; }
}

var aThings = new List<A>();
var bThings = new List<B>();

var innerJoin = aThings.SelectMany(a =>
bThings.Where(b => a.Id == b.Id).Select(b => new { a, b })).ToList();

var exceptSet = aThings.Where(a =>
!bThings.Select(b => b.Id).Contains(a.Id)).Select( a =>
{
B b = new B();
return new { a, b };
});

var outerJoin = innerJoin;
outerJoin.AddRange(exceptSet);

Резултатът е списък на анонимни типове {a, b}


-1 за отговор № 2

Microsoft има два екипа за данни, към които и двете имат за целсъщата цел: LINQ-to-SQL и ADO.NET. Има поддръжка сега с ADO.NET за Entities, което означава, че LINQ-to-SQL няма да бъде толкова висок приоритет като ADO.NET предлагането.

Visual Studio 2010 има поддръжка за.NET 4, което от своя страна поддържа ADO.NET за обекти и LINQ-to-SQL. Освен броя на характеристиките на производителността, които присъстват във VS2010, "не съм виждал много по отношение на поддръжката на данни, което е различно от VS2008.

По отношение на лявата външна връзка:

var dc = new DataContext();

var query = (
from t1 in dc.MyTable
join a in MyJoinedTable on p.Id equals a.Id into tempTable
from t2 in tempTable.DefaultIfEmpty()
select new { p.Column1, p.Column2, t2.Column1}
);