3

我无法弄清楚如何在使用 EF 5 的 asp.net 站点中使用 LINQ-To-SQL 遍历一对多关系。我已经在类文件中建立了关系,但是当我尝试从父级到子级时在我的 where 子句中,我没有得到要过滤的子列的列表。谁能告诉我我的代码有什么问题,我是 EF 和 LINQ 的新手。

产品.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

好的,我必须将代码隐藏更新为:

            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 回答