Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq分组_C#_Sql_Asp.net Mvc_Linq - Fatal编程技术网

C# 使用Linq分组

C# 使用Linq分组,c#,sql,asp.net-mvc,linq,C#,Sql,Asp.net Mvc,Linq,我需要提供一个按类别分组的广告列表,包括每个类别的广告数量 类别按父类别分组,如汽车,包括轿车、敞篷车和运动类 型号: public class Ad { [Key] public int Id { get; set; } public Category Category { get; set; } } public class Category { public int Id { get; set; } [ForeignKey("CategoryP

我需要提供一个按类别分组的广告列表,包括每个类别的广告数量

类别按父类别分组,如汽车,包括轿车、敞篷车和运动类

型号:

public class Ad
{
    [Key]
    public int Id { get; set; }

    public Category Category { get; set; }
}

public class Category
{
    public int Id { get; set; }

    [ForeignKey("CategoryParent")]
    public int? CategoryParent_Id { get; set; }

    public string Name { get; set; }

    public virtual ICollection<Ad> Ads { get; set; }
}
目前,我只能显示所有类别的列表,而不能按父类别进行分组

var adIds = {1,2,4,5}

var result = 
    from c in categoryQuery
    let searchCount = c.Ads.Count(a => adIds.Contains(a.Id))
    where searchCount > 0
    select new CategoryGetAllBySearchDto
    {
        Id = c.CategoryParent_Id,
        Name = c.CategoryParent.Name,
        SearchCount = searchCount,
        Ids = c.Ads.Where(a => adIds.Contains(a.Id)).Select(a => a.Id)
    }; 
我想你需要这个:

var adIds = { 1, 2, 4, 5 };
var result = from c in categoryQuery
             where c.Ads.Any(a => adIds.Contains(a.Id))
             group c by new {c.CategoryParent_Id, c.CategoryParent.Name} into g
             select new CategoryGetAllBySearchDto
             {
                 Id = g.Key.CategoryParent_Id,
                 Name = g.Key.Name,

                 SearchCount = g.SelectMany(u => u.Ads)
                                .Where(a => adIds.Contains(a.Id))
                                .Count(),

                 Ids = g.SelectMany(u => u.Ads)
                        .Where(a => adIds.Contains(a.Id))
                        .Select(a => a.Id)
             };
我想你需要这个:

var adIds = { 1, 2, 4, 5 };
var result = from c in categoryQuery
             where c.Ads.Any(a => adIds.Contains(a.Id))
             group c by new {c.CategoryParent_Id, c.CategoryParent.Name} into g
             select new CategoryGetAllBySearchDto
             {
                 Id = g.Key.CategoryParent_Id,
                 Name = g.Key.Name,

                 SearchCount = g.SelectMany(u => u.Ads)
                                .Where(a => adIds.Contains(a.Id))
                                .Count(),

                 Ids = g.SelectMany(u => u.Ads)
                        .Where(a => adIds.Contains(a.Id))
                        .Select(a => a.Id)
             };
我想你需要这个:

var adIds = { 1, 2, 4, 5 };
var result = from c in categoryQuery
             where c.Ads.Any(a => adIds.Contains(a.Id))
             group c by new {c.CategoryParent_Id, c.CategoryParent.Name} into g
             select new CategoryGetAllBySearchDto
             {
                 Id = g.Key.CategoryParent_Id,
                 Name = g.Key.Name,

                 SearchCount = g.SelectMany(u => u.Ads)
                                .Where(a => adIds.Contains(a.Id))
                                .Count(),

                 Ids = g.SelectMany(u => u.Ads)
                        .Where(a => adIds.Contains(a.Id))
                        .Select(a => a.Id)
             };
我想你需要这个:

var adIds = { 1, 2, 4, 5 };
var result = from c in categoryQuery
             where c.Ads.Any(a => adIds.Contains(a.Id))
             group c by new {c.CategoryParent_Id, c.CategoryParent.Name} into g
             select new CategoryGetAllBySearchDto
             {
                 Id = g.Key.CategoryParent_Id,
                 Name = g.Key.Name,

                 SearchCount = g.SelectMany(u => u.Ads)
                                .Where(a => adIds.Contains(a.Id))
                                .Count(),

                 Ids = g.SelectMany(u => u.Ads)
                        .Where(a => adIds.Contains(a.Id))
                        .Select(a => a.Id)
             };

您可以取出
SearchCount
并将
AsEnumerable
添加到
Ids
中,以便只获取一次查询

    public class CategoryGetAllBySearchDto
        {
            public int? Id { get; set; }
            public string Name { get; set; }

            public int SearchCount { get {  return this.Ids.Count() } }

            public IEnumerable<int> Ids { get; set; }
        }

您可以取出
SearchCount
并将
AsEnumerable
添加到
Ids
中,以便只获取一次查询

    public class CategoryGetAllBySearchDto
        {
            public int? Id { get; set; }
            public string Name { get; set; }

            public int SearchCount { get {  return this.Ids.Count() } }

            public IEnumerable<int> Ids { get; set; }
        }

您可以取出
SearchCount
并将
AsEnumerable
添加到
Ids
中,以便只获取一次查询

    public class CategoryGetAllBySearchDto
        {
            public int? Id { get; set; }
            public string Name { get; set; }

            public int SearchCount { get {  return this.Ids.Count() } }

            public IEnumerable<int> Ids { get; set; }
        }

您可以取出
SearchCount
并将
AsEnumerable
添加到
Ids
中,以便只获取一次查询

    public class CategoryGetAllBySearchDto
        {
            public int? Id { get; set; }
            public string Name { get; set; }

            public int SearchCount { get {  return this.Ids.Count() } }

            public IEnumerable<int> Ids { get; set; }
        }

GroupBy
内存中:

var adIds = { 1, 2, 4, 5 };
var result = categoryQuery.Where(c => c.Ads.Any(a => adIds.Contains(a.Id)))
                        .Select(c => new 
                        { 
                            c.CategoryParent_Id, 
                            c.CategoryParent.Name,
                            Ids = c.Ads.Where(a => adIds.Contains(a.Id)).Select(a => a.Id).AsEnumerable()
                        })
                        .ToList()
                        .GroupBy(c => new {c.CategoryParent_Id, c.Name})
                        .Select(g => new CategoryGetAllBySearchDto
                         {
                             Id = g.Key.CategoryParent_Id,
                             Name = g.Key.Name,
                             Ids = g.SelectMany(u => u.Ids).AsEnumerable()
                         })
                         .ToList();

GroupBy
内存中:

var adIds = { 1, 2, 4, 5 };
var result = categoryQuery.Where(c => c.Ads.Any(a => adIds.Contains(a.Id)))
                        .Select(c => new 
                        { 
                            c.CategoryParent_Id, 
                            c.CategoryParent.Name,
                            Ids = c.Ads.Where(a => adIds.Contains(a.Id)).Select(a => a.Id).AsEnumerable()
                        })
                        .ToList()
                        .GroupBy(c => new {c.CategoryParent_Id, c.Name})
                        .Select(g => new CategoryGetAllBySearchDto
                         {
                             Id = g.Key.CategoryParent_Id,
                             Name = g.Key.Name,
                             Ids = g.SelectMany(u => u.Ids).AsEnumerable()
                         })
                         .ToList();

GroupBy
内存中:

var adIds = { 1, 2, 4, 5 };
var result = categoryQuery.Where(c => c.Ads.Any(a => adIds.Contains(a.Id)))
                        .Select(c => new 
                        { 
                            c.CategoryParent_Id, 
                            c.CategoryParent.Name,
                            Ids = c.Ads.Where(a => adIds.Contains(a.Id)).Select(a => a.Id).AsEnumerable()
                        })
                        .ToList()
                        .GroupBy(c => new {c.CategoryParent_Id, c.Name})
                        .Select(g => new CategoryGetAllBySearchDto
                         {
                             Id = g.Key.CategoryParent_Id,
                             Name = g.Key.Name,
                             Ids = g.SelectMany(u => u.Ids).AsEnumerable()
                         })
                         .ToList();

GroupBy
内存中:

var adIds = { 1, 2, 4, 5 };
var result = categoryQuery.Where(c => c.Ads.Any(a => adIds.Contains(a.Id)))
                        .Select(c => new 
                        { 
                            c.CategoryParent_Id, 
                            c.CategoryParent.Name,
                            Ids = c.Ads.Where(a => adIds.Contains(a.Id)).Select(a => a.Id).AsEnumerable()
                        })
                        .ToList()
                        .GroupBy(c => new {c.CategoryParent_Id, c.Name})
                        .Select(g => new CategoryGetAllBySearchDto
                         {
                             Id = g.Key.CategoryParent_Id,
                             Name = g.Key.Name,
                             Ids = g.SelectMany(u => u.Ids).AsEnumerable()
                         })
                         .ToList();


我知道,对于每个类别,您都想知道类别本身及其所有继承类别(子女、孙子等)中的项目数量之和。对吗?您还说您需要一个项目列表或项目组。这不是很清楚。谢谢。您的示例显示了计数的概念,但不是项目列表。您好,谢谢。我想按ParentCategory和子类别的所有广告计数对类别进行分组。比如汽车:100辆(轿车、敞篷车等的总和)自行车:20辆(直升机等的总和)。我知道,对于每个类别,您都想知道类别本身及其所有继承类别(子女、孙子等)中项目数量的总和。对吗?您还说您需要一个项目列表或项目组。这不是很清楚。谢谢。您的示例显示了计数的概念,但不是项目列表。您好,谢谢。我想按ParentCategory和子类别的所有广告计数对类别进行分组。比如汽车:100辆(轿车、敞篷车等的总和)自行车:20辆(直升机等的总和)。我知道,对于每个类别,您都想知道类别本身及其所有继承类别(子女、孙子等)中项目数量的总和。对吗?您还说您需要一个项目列表或项目组。这不是很清楚。谢谢。您的示例显示了计数的概念,但不是项目列表。您好,谢谢。我想按ParentCategory和子类别的所有广告计数对类别进行分组。比如汽车:100辆(轿车、敞篷车等的总和)自行车:20辆(直升机等的总和)。我知道,对于每个类别,您都想知道类别本身及其所有继承类别(子女、孙子等)中项目数量的总和。对吗?您还说您需要一个项目列表或项目组。这不是很清楚。谢谢。您的示例显示了计数的概念,但不是项目列表。您好,谢谢。我想按ParentCategory和子类别的所有广告计数对类别进行分组。比如汽车:100辆(轿车、敞篷车等的总和)自行车:20辆(直升机等的总和)。嗨,谢谢。我得到的“searchCount”在“searchCount=searchCount”一行的当前上下文中不存在,你知道为什么吗?你也可以从
searchCount
中找到答案,让你的查询更简单,我需要发布另一个答案我的旧版本,其中我只列出了类别计数,而不是CategoryParent分组计数大约150毫秒(Chrome时间),现在是492ms,用于相同的搜索:(它不一样,它有
GroupBy
,您也可以获取所有数据,并在momery中对它们进行分组,您好,谢谢。我得到的“searchCount”在当前上下文中的“searchCount=searchCount”行中不存在,你知道为什么吗?你也可以拿出
SearchCount
让你的查询更简单,我需要发布另一个答案我的旧版本,其中我只列出了类别计数,而不是CategoryParent分组计数大约为150ms(Chrome时间),现在相同的搜索是492ms:(不一样,它有
GroupBy
,您也可以获取所有数据,并在momery中对它们进行分组,您好,谢谢。我得到的“searchCount”在当前上下文中的“searchCount=searchCount”行中不存在,你知道为什么吗?你也可以拿出
SearchCount
让你的查询更简单,我需要发布另一个答案我的旧版本,其中我只列出了类别计数,而不是CategoryParent分组计数大约为150ms(Chrome时间),现在相同的搜索是492ms:(不一样,它有
GroupBy
,您也可以获取所有数据,并在momery中对它们进行分组,您好,谢谢。我得到的“searchCount”在当前上下文中的“searchCount=searchCount”行中不存在,你知道为什么吗?你也可以拿出
SearchCount
让你的查询更简单,我需要发布另一个答案我的旧版本,其中我只列出了类别计数,而不是CategoryParent分组计数大约为150ms(Chrome时间),现在相同的搜索是492ms:(这是不一样的,它有
GroupBy
,你也可以获取所有数据,并将它们按时间分组,它正在变得更好!266ms:P在你看来这是我们能达到的最好成绩吗?因为
GroupBy
,你可以在内存中执行
GroupBy
,检查我的新帖子!266ms:P这是我们在y中能达到的最好成绩吗我们的意见?这是因为
GroupBy
,你可以在内存中执行
GroupBy
,检查我的新帖子越来越好!266ms:P这是你认为我们能达到的最好的结果吗?这是因为
GroupBy
,你可以在内存中执行
GroupBy
,检查我的新帖子越来越好!266ms:P这是t吗