Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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通过扩展方法与group by count进行左外部联接_C#_.net_Entity Framework_Linq - Fatal编程技术网

C# LINQ通过扩展方法与group by count进行左外部联接

C# LINQ通过扩展方法与group by count进行左外部联接,c#,.net,entity-framework,linq,C#,.net,Entity Framework,Linq,我有两张桌子类别和广告 每个类别在广告表中都可以有许多广告 我想要所有类别的详细信息,包括每个类别有多少广告 以下是我的Linq表达式,它只获取包含广告的类别,因为FirstOrDefault() 我想知道,如果条件加上位置id(比如:lid)为“7”的类别,我如何才能实现结果 我的表情如下 var x1 = context.Categories .GroupJoin( context.ads,

我有两张桌子<代码>类别和
广告

每个
类别
广告
表中都可以有许多广告

我想要所有类别的详细信息,包括每个类别有多少广告

以下是我的Linq表达式,它只获取包含广告的类别,因为
FirstOrDefault()

我想知道,如果条件加上位置id(比如:lid)为“7”的类别,我如何才能实现结果

我的表情如下

var x1 = context.Categories
                .GroupJoin(
                    context.ads,
                    cat => cat.id,
                    ad => ad.catid,
                    (cat, ad) => new { cats = cat, ads = ad })
                .SelectMany(
                    a => a.ads.DefaultIfEmpty(),
                    (a, y) => new { catss = a.cats, adss = y })
                .GroupBy(w => w.adss,ww=>new {  cat=ww.catss,count=ww.catss.ads.Count()})
                .Where(s=>s.FirstOrDefault().cat.lid==7);

您可以尝试以下方法:

var result = context.Categories
                    .Where(category => category.lid == 7)
                    .GroupJoin(
                        context.ads
                        , category => category.id
                        , ad => ad.catid
                        , (c,a) => new 
                        { 
                            Category = category, 
                            NumberOfAds = a.DefaultIfEmpty().Count(x => x!=null)
                        });

您可以尝试以下方法:

var result = context.Categories
                    .Where(category => category.lid == 7)
                    .GroupJoin(
                        context.ads
                        , category => category.id
                        , ad => ad.catid
                        , (c,a) => new 
                        { 
                            Category = category, 
                            NumberOfAds = a.DefaultIfEmpty().Count(x => x!=null)
                        });

显然,
类别
广告
之间存在一对多的关系:每个
类别
都有零个或多个
广告
,而每个
广告
恰好属于一个
类别

在适当的实体框架中,这将建模如下:

class Category
{
    public int Id {get; set;}
    // every Category has zero or more Adds:
    public virtual ICollection<Ad> Ads {get; set;}
    ...
}

class Ad
{
    public int Id {get; set;}
    // every Ad belongs to exactly one Category, using foreign key CategoryId:
    public int CategoryId {get; set;}
    public Category Category {get; set;}
    ...
}
换句话说:对于类别集合中的每个类别,创建一个新的匿名类对象,该对象具有两个属性:

  • 类别包含所考虑的类别
  • AdCount包含类别拥有的广告数量

实体框架的模型将理解这样做需要一个连接和一个计数。

显然,
类别
广告
之间存在一对多的关系:每个
类别
都有零个或多个
广告
,每个
广告
都只属于一个
类别

在适当的实体框架中,这将建模如下:

class Category
{
    public int Id {get; set;}
    // every Category has zero or more Adds:
    public virtual ICollection<Ad> Ads {get; set;}
    ...
}

class Ad
{
    public int Id {get; set;}
    // every Ad belongs to exactly one Category, using foreign key CategoryId:
    public int CategoryId {get; set;}
    public Category Category {get; set;}
    ...
}
换句话说:对于类别集合中的每个类别,创建一个新的匿名类对象,该对象具有两个属性:

  • 类别包含所考虑的类别
  • AdCount包含类别拥有的广告数量

实体框架的模型将理解,要做到这一点,需要连接和计数。

我正在寻找扩展方法solution@Alex更新。请让我知道,如果这是你需要的。我想要所有的类别,无论他们是否有广告。如果没有广告,则计数应为0。@Alex根据您的评论,我认为上述查询无法解决您的问题。所以,让我们澄清一些我可能误解的事情。您不想要位置id为7的类别吗?您已经明确说明了这一点
,因为条件加上只有位置id(比如:lid)为“7”的类别。
如果您正确地显示了您要查找的内容,那么如何获得所有类别?@Christos的答案写得很好。您可以将其改进为所需的格式,只需对GroupBy和Select子句进行少量更改solution@Alex更新。请让我知道,如果这是你需要的。我想要所有的类别,无论他们是否有广告。如果没有广告,则计数应为0。@Alex根据您的评论,我认为上述查询无法解决您的问题。所以,让我们澄清一些我可能误解的事情。您不想要位置id为7的类别吗?您已经明确说明了这一点
,因为条件加上只有位置id(比如:lid)为“7”的类别。
如果您正确地显示了您要查找的内容,那么如何获得所有类别?@Christos的答案写得很好。您可以将其改进为所需格式,只需在GroupBy和Select子句上稍作更改。感谢您的回答,但已接受的回答显示出被询问但获得好答案的左外连接值得+1感谢您的回答,但已接受的回答显示出被询问但获得好答案的左外连接值得+1