3

EF 5 を使用する asp.net サイトで LINQ-To-SQL を使用して 1 対多の関係をたどる方法がわかりません。クラス ファイルで関係を作成しましたが、親から子に移動しようとすると私のwhere句では、フィルタリングする子列のリストが与えられていません。私のコードの何が問題なのか誰か教えてもらえますか? 私は EF と LINQ が初めてです。

Product.cs:

    public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual Category Category { get; set; }
}

}

カテゴリ.cs:

    public class Category
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual IList<Product> Products { get; set; }
}

コードビハインド:

            using (var db = new Compleate())
        {
            rpBooks.DataSource = (from c in db.Categories
                                  where c.Products.Name == "Books"
                                  select new
                                  {
                                      c.Name
                                  }).ToList();
        }
4

3 に答える 3

1

書籍カテゴリのすべての製品が必要ですか?

from p in db.Products
where p.Category.Name == "Books"
select new
{
    p.Name
}

それとも、書籍と呼ばれる製品を含むすべてのカテゴリを取得しますか?

from c in db.Categories
where c.Products.Contains( p => p.Name == "Books")
select new
{
    c.Name
}

ところで、名前だけを選択している場合は、選択部分の匿名型をスキップできます...

select p.name
于 2013-03-03T18:30:17.260 に答える
0

OK、codebhind を次のように更新する必要がありました。

            using (var db = new Compleate())
        {
           rpBooks.DataSource = (from c in db.Categories
                              join p in db.Products on c.ID equals p.id
                              where c.Products.Name == "Books"
                              select new
                              {
                                  c.Name
                              }).ToList();

        }
于 2013-03-03T18:14:05.940 に答える
-1

name = c.Nameトラバーシングの問題ではなく、構文の問題であるはずです。匿名型に関する簡単な記事をここで読んでください。

于 2013-03-02T19:26:05.207 に答える