1

テーブルを外部キーでマップせずに、linq-to-entitiesで左外部結合を行う方法はありますか?

また、現在のすべての欠陥にもかかわらず、当社がlinq-to-entitiesの使用に固執することを決定した場合、Visual Studio 2010を入手することが重要だと思いますか?言い換えると、Visual Studio 2008にないエンティティを使用して開発するのに役立つ、Visual Studio 2010には何がありますか?

ありがとう。

4

2 に答える 2

1

オブジェクトが適切にフラット化されていないため、これでは満足できないかもしれませんが、外部結合を実行して匿名型のコレクションを返すことはできます。

左外部結合は、内部結合と除外セット (2 番目のセットに結合しない最初のセットの部分) の和集合と同じです。

ここで私は単に

  • 内部結合を計算する
  • 例外セットを計算します (型が一貫していることを確認するために空の B エンティティを作成します)
  • 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} のリストです

于 2009-10-26T07:11:15.493 に答える
-1

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}
    );
于 2009-08-07T17:49:25.620 に答える