从linq到sql的多个表中选择

时间:2016-08-14 07:12:15

标签: c# linq

我有这样的课程Category

public int id { get; set; }
public string catName { get; set; }
public List<string> subCat { get; set; }

我有2个表,tblCategorytblSubCategory

我想选择每个类别下的所有类别和子类别。我正在尝试下面的代码,但我得到了所有类别的相同结果,即使某些类别没有任何子类别,他们仍然获得子类别的漏洞列表。

非常感谢任何帮助。

public static List<Category> getCategoryList()
{
    try
    {
        using (var db = new LinqToDBAwkoDataContext())
        {
            var list = from c in db.tblCategories
                       select new Category
                            {
                               id = c.CatId,
                               catName = c.CatName,
                               subCat = subCategoriesByCatId(db)
                           };
            return list.ToList();
        }
    }
    catch (Exception ex)
    {
        throw new Exception("An error has occurred");
    }            
}

private static List<string> subCategoriesByCatId(LinqToDBAwkoDataContext db)
{
    var list = from s in db.tblSubCategories
               join c in db.tblCategories on s.CatId equals c.CatId
               where s.CatId == c.CatId
               select s.SubCatName;
    return list.ToList();
}

1 个答案:

答案 0 :(得分:1)

你有一些错误。首先,在subCategoriesByCatId方法中选择所有类别和子类别。您必须将CatId传递给此方法。但随后它会产生一个子查询。我不认为你想要那个。使用简单的连接。其次,您使用ToList方法调用subCategoriesByCatId。这导致Categories表中每行的数据库往返。

public static List<Category> getCategoryList()
{
    try
    {
        using (var db = new LinqToDBAwkoDataContext())
        {
            var list = from c in db.tblCategories
                       join s in db.tblSubCategories
                       select new Category
                       {
                           id = c.CatId,
                           catName = c.CatName,
                           subCat = s.SubCatName
                       };
            return list.ToList();
        }
    }
    catch (Exception ex)
    {
        throw new Exception("An error has occured");
    }            
}