如何使用linq选择实体类别和子类别?

时间:2011-07-10 02:49:45

标签: c# asp.net linq-to-entities

这是我的Categories表的结构

Categories Table
--------------------------------
ID      Name      ParentID

1       NameOne    NULL
2       NameTwo    1
3       NameThree  1
4       NameFour   1

这是我的ItemTable,它具有类别表

的引用键
Items Table
--------------------------------------------
ItemID   CategoryID SubCategoryID      ItemName
1        1          2                  ItemOne
2        1          3                  ItemTwo

如何使用LINQ to entity?

加入它以获取如下例所示的唯一记录

结果必须是

ItemID               CategoryName   SubCategoryName           ItemName
-----------------------------------------------------------------------
1                    NameOne        NameTwo                   ItemOne
2                    NameOne        NameThree                 ItemTwo   

3 个答案:

答案 0 :(得分:2)

我假设你正在使用实体数据模型(.edmx文件),你从数据库中拖动了所有必要的表。

我很难给你一个确切的查询,因为我不知道你给某些参考文献和模型命名了什么。

希望这有助于您开始:

var q = from item in context.Items
        select new {
            ItemID = item.ItemID,
            CategoryName = item.Category.Name,
            SubCategoryName = item.SubCategory.Name,
            ItemName = item.ItemName
        };

请注意,“Category”和“SubCategory”是Items表中CategoryId和SubCategoryId对Categories表中条目的引用。因此将其替换为您在数据模型文件中命名的内容。

祝你好运!

答案 1 :(得分:0)

这样的事情可能会起作用,具体取决于你如何定义实体。

var results = Entities.Items.Select( i => new { ItemID = i.ID, CategoryName = i.Category.Name, SubCategoryName = i.SubCategory.Name, ItemName = i.Name } );

答案 2 :(得分:0)

我同意@ Mouhannad的假设:

  

我假设你正在使用实体数据模型(.edmx文件),你从数据库中拖动了所有必要的表。

但是,如果不对,那么您可以尝试使用join,如下所示:

List<Item> items = someMethodToFillItems();
List<Category> categories = someMethodToFillCategories();

var q = (from item in items join
          cat in categories on cat.Id equals item.CategoryId
          subCat in categories on subCat.ParentId equals cat.Id
    select new {
        ItemID = item.ItemID,
        CategoryName = cat.Name,
        SubCategoryName = subCat.Name,
        ItemName = item.ItemName
    }
);