1

Entity Framework Code First を使い始めています。

そのようなPOCOがあるとします(最終的に単純化されています):

public class BortStructure
{
   public Guid Id { get; set; }
   public String Name { get; set; }
}

public class Slot
{
   public Guid Id { get; set; }
   public String Name { get; set; }
   public BortStructure { get; set; }
}

public class SystemType
{
   public Guid Id { get; set; }
   public String Name {get; set; }
}

public class SlotSystemType
{
   public Guid Id { get; set; }
   public Slot Slot { get; set; }
   public SystemType SystemType {get; set; }
}

とコンテキスト

public MyContext : DbContext
{
   public DbSet<BortStructure> BortStructures { get; set; }
   public DbSet<Slot> Slots{ get; set; }
   public DbSet<SystemType> SystemTypes { get; set; }
   public DbSet<SlotSystemType> SlotSystemTypes { get; set; }
}

接続されたスロットのリストを使用して Id で BortStructure を取得するタスクがあり、それぞれに systemTypes のリストが接続されています。

SQL を使用すると、いくつかの JOIN でそれを行うことができました。

SELECT BortStructures.Id, BortStructures.Name, Slots.Id, 
Slots.Name, SystemType.Id, SystemType.Name FROM
((BortStructures LEFT JOIN Slots ON BortStructures.Id = Slots.BortStructureId)
LEFT JOIN SlotSystemTypes ON SlotSystemTypes.SlotId = Slots.Id)
LEFT JOIN SystemTypes ON SystemTypes.Id = SlotSystemTypes.SystemTypeId
WHERE BortStructures.Id='XXXXXX' ORDER BY Slots.Id, SystemType.Id

しかし、Entity Framework Code First では、それを行う方法がわかりません。

私が使用する場合

var slotSystemTypes = from sl in MyContext.SlotSystemTypes
where sl.Slot.BortStructure.Id = XXXXXX
orderby sl.Slot.Id, sl.SystemType.Id
select sl;

もちろん、BortStructure が SystemTypes が添付されていないスロット/スロットで構成されていない場合、何も受け取りません。

スロットの空のリスト/スロット付きの BortStructure を取得する代わりに、それぞれに SystemTypes の空のリストが添付されています。

データベース構成の単一のLINQ クエリでそれをアーカイブする方法はありますか?

4

1 に答える 1

1

join演算子の例を使用できます:

string[] categories = new string[]{  
    "Beverages",   
    "Condiments",   
    "Vegetables",   
    "Dairy Products",   
    "Seafood" };  

List<Product> products = GetProductList(); 

var q = 
    from c in categories 
    join p in products on c equals p.Category 
    select new { Category = c, p.ProductName }; 

foreach (var v in q) 
{ 
    Console.WriteLine(v.ProductName + ": " + v.Category);  
} 

その他のサンプル: http://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9

于 2013-06-14T11:42:45.120 に答える