Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.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# 按多对多关系分组_C#_Linq_Entity Framework - Fatal编程技术网

C# 按多对多关系分组

C# 按多对多关系分组,c#,linq,entity-framework,C#,Linq,Entity Framework,我有两个实体: public class Category { // Primary properties public int Id { get; set; } public string Name { get; set; } // Navigation properties public virtual ICollection<Address> Addresses { get; set; } } public class Address

我有两个实体:

public class Category
{
    // Primary properties
    public int Id { get; set; }
    public string Name { get; set; }

    // Navigation properties
    public virtual ICollection<Address> Addresses { get; set; }
}

public class Address
{
    // Primary properties
    public int Id { get; set; }
    public string Name { get; set; }

    // Navigation properties
    public virtual ICollection<Category> Categories { get; set; }
}
如果我的地址Id为1和3,我想得到:

Categories - "WORKSHOP -  Count: 1"
             "DEALER   -  Count: 2"
如果我有地址Id的1和2,我想得到:Category-

Categories - "WORKSHOP -  Count: 2"
             "DEALER   -  Count: 1" 
到目前为止,我了解到了这一点,但group by不起作用:

var groupedAddresses = from add in addressQuery
                       where addressIds.Contains(add.Id)
                       group add by new { Category_Id = add.Categories, Address_Id = add.Id };

var result = from add in groupedAddresses 
             group add by add.Id into final
             join c in categoryQuery on final.Key equals c.Id
             select new CategoryGetAllBySearchDto
             {
                   Id = final.Key,
                   Name = c.Name,
                   SearchCount = final.Count()
              };
有什么想法吗


谢谢。

为什么地址ID为1和3时有
“经销商-计数:1”
?经销商提供了两个地址。看起来计数应该是2Hi,谢谢,当我重新检查问题时,我看到了这个错误,我已经纠正了它。谢谢,谢谢!但它会返回所有类别,包括SearchCount=0的类别,我如何更改您的解决方案以仅获取Count>0的类别?谢谢again@Patrick更新后,您可以使用额外的查询变量来实现这一点!我的微笑从办公室的一边传到另一边:)非常感谢你的善意帮助,以及你完成这件事的方式和速度,真是太好了fantastic@Patrick欢迎:)学习这是一个非常强大的工具好吧,我明白了!:)这里的问题是,我需要将ID列表发送回视图,并将它们存储在隐藏输入中,因此我必须转换为格式“id1,id2,id3,…”
int[] addressIds = { 1, 3 };

var query = from c in categoryQuery
            let searchCount = c.Addresses.Count(a => addressIds.Contains(a.Id))
            where searchCount > 0
            select new CategoryGetAllBySearchDto{
               Id = c.Id,
               Name = c.Name,
               SearchCount = searchCount
            };
int[] addressIds = { 1, 3 };

var query = from c in categoryQuery
            let searchCount = c.Addresses.Count(a => addressIds.Contains(a.Id))
            where searchCount > 0
            select new CategoryGetAllBySearchDto{
               Id = c.Id,
               Name = c.Name,
               SearchCount = searchCount
            };