テーブルを外部キーでマップせずに、linq-to-entitiesで左外部結合を行う方法はありますか?
また、現在のすべての欠陥にもかかわらず、当社がlinq-to-entitiesの使用に固執することを決定した場合、Visual Studio 2010を入手することが重要だと思いますか?言い換えると、Visual Studio 2008にないエンティティを使用して開発するのに役立つ、Visual Studio 2010には何がありますか?
ありがとう。
テーブルを外部キーでマップせずに、linq-to-entitiesで左外部結合を行う方法はありますか?
また、現在のすべての欠陥にもかかわらず、当社がlinq-to-entitiesの使用に固執することを決定した場合、Visual Studio 2010を入手することが重要だと思いますか?言い換えると、Visual Studio 2008にないエンティティを使用して開発するのに役立つ、Visual Studio 2010には何がありますか?
ありがとう。
オブジェクトが適切にフラット化されていないため、これでは満足できないかもしれませんが、外部結合を実行して匿名型のコレクションを返すことはできます。
左外部結合は、内部結合と除外セット (2 番目のセットに結合しない最初のセットの部分) の和集合と同じです。
ここで私は単に
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} のリストです
Microsoft には、LINQ-to-SQL と ADO.NET エンティティという同じ目標を目指す 2 つのデータ チームがあります。現在、ADO.NET for Entities がサポートされています。これは、LINQ-to-SQL が ADO.NET の製品ほど優先されないことを意味します。
Visual Studio 2010 は .NET 4 をサポートしており、エンティティと LINQ-to-SQL 用の ADO.NET をサポートしています。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}
);