0


私は2つのモデルGardenとFlowerを持っています

public class Garden
{
    public int Id { get; set; }
    public string Name { get; set; } // Default value: Garden #[Id]

    // Location.
    public int LocationX { get; set; }
    public int LocationY { get; set; }

    // Flowers.
    public virtual List<Flower> Flowers { get; set; }
}

public class Flower
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Color { get; set; }
    public double Height { get; set; }

    public DateTime LastWatered { get; set; }
    public DateTime Planted { get; set; }
}

public class DataContext : DbContext
{
    public DbSet<Garden> Gardens { get; set; }
}

次に、ID で花を選択する必要があります。私はこれにたどり着きましたが、それが良い方法かどうかはわかりません。どうすればいいですか?それについての記事はありますか?

var garden = _db.Gardens.Where(g => g.Id == gardenId).SingleOrDefault();
var flower = garden.Flowers.Where(f => f.Id == flowerId).SingleOrDefault();
4

2 に答える 2

0

私はこれを提案します:

 var garden = _db.Gardens.SingleOrDefault(g => g.Id == gardenId);

 Flower flower = null;

 if (garden != null)
 {
     flower = garden.Flowers.SingleOrDefault(f => f.Id == flowerId);
 }     

最初に Where を使用し、後で SingleOrDefault を使用する代わりに、SingleOrDefault を使用します。

編集

@JoachimIsaksson が示唆したように、NullReferenceException の可能性を回避するために、garden の null 参照チェックを追加しました。

于 2013-01-26T12:03:06.887 に答える
0

別の構文を使用して書き直して、1 回のデータベース アクセスで全体の選択を行うことができます。これにより、null チェックの必要もなくなります。

// this will find the flower with the correct id 
// only if it's also in the garden with the correct id

var result = (from garden in _db.Gardens
              from flower in garden.Flowers
              where garden.Id == gardenId 
                 && flower.Id == flowerId
              select flower).SingleOrDefault();
于 2013-01-26T12:26:39.467 に答える