Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 with where子句_C#_Linq_Linq To Entities - Fatal编程技术网

C# 如何使用LINQ group by with where子句

C# 如何使用LINQ group by with where子句,c#,linq,linq-to-entities,C#,Linq,Linq To Entities,我有一份数据清单,如下所述: From To Gender departure date Delhi Mumbai M 16-Feb-18 Delhi Mumbai M 16-Feb-18 Delhi Mumbai F 16-Feb-18 Delhi Mumbai C 16-Feb-18 Mumbai Mohili F

我有一份数据清单,如下所述:

From        To      Gender    departure date
Delhi      Mumbai    M         16-Feb-18
Delhi      Mumbai    M         16-Feb-18
Delhi      Mumbai    F         16-Feb-18
Delhi      Mumbai    C         16-Feb-18
Mumbai     Mohili    F         16-Feb-18
Mumbai     Mohili    M         16-Feb-18
Mumbai     Mohili    C         16-Feb-18
我想根据
From
to
列对该列表进行分组,并通过LINQ计算每组中有多少男性、女性和儿童。我怎样才能做到这一点。 我这样分组,但现在如何计算男性和女性的数量

var list = result.Journey.GroupBy(x => new { x.From, x.To });
试试下面的代码

        var list = travelars.GroupBy(x => new { x.From, x.To }).ToList().Select(e => new { 
            MaleCount = e.Count(g => g.Gender == "M"),
            FemaleCount = e.Count(g => g.Gender == "F"),
            ChildCount = e.Count(g => g.Gender == "C"),
        });

需要知道的重要一点是
GroupBy
的返回类型是
i分组
。此分组是可枚举的,并在枚举时生成元素。因此,分组可以作为任何其他可枚举项进行LINQ查询

var query = result.Journey
  .GroupBy(x => new { x.From, x.To })
  .Select(g => new
  {
    From = g.Key.From,
    To = g.Key.To,
    MCount = g.Count(x => x.Gender == "M"),
    FCount = g.Count(x => x.Gender == "F"),
    CCount = g.Count(x => x.Gender == "C")
  });

您似乎不理解
GroupBy
返回的内容。它返回一组分组。每个
i分组
本身就是该组中事物的
i可数

我建议你做的是再次按性别分组!这样,即使已将新性别添加到模型中,也不必添加代码来计算新性别

// using the new C# 7 tuple syntax!
foreach(var group in Journeys.GroupBy(x => (x.To, x.From))) {
    Console.WriteLine($"People traveling from {group.Key.Item1} to {group.Key.Item2}:");
    foreach (var subgroup in group.GroupBy(x => x.Gender)) {
        Console.WriteLine($"{subgroup.Key}: {subgroup.Count()} people");
    }
}
你可以试试这个

  List<Journey> list = new List<Journey>();

            list.Add(new Journey() {From="Delhi",To="Mumbai",Gender=Gender.MALE });
            list.Add(new Journey() { From = "Delhi", To = "Mumbai", Gender = Gender.MALE });
            list.Add(new Journey() { From = "Delhi", To = "Mumbai", Gender = Gender.FEMALE });
            list.Add(new Journey() { From = "Delhi", To = "Mumbai", Gender = Gender.CHILD });
            list.Add(new Journey() { From = "Delhi", To = "Mumbai", Gender = Gender.MALE });
            list.Add(new Journey() { From = "Delhi", To = "Mumbai", Gender = Gender.MALE });
            list.Add(new Journey() { From = "Mumbai", To = "Mohili", Gender = Gender.FEMALE });
            list.Add(new Journey() { From = "Mumbai", To = "Mohili", Gender = Gender.CHILD });
            list.Add(new Journey() { From = "Mumbai", To = "Mohili", Gender = Gender.CHILD });

            var grp = list.GroupBy(s => new { s.From, s.To }).ToDictionary(d => d.Key, d => d.Select(i=>new JourneyCalc { From=i.From,To=i.To,Gender=i.Gender}).ToList());

            foreach (var item in grp)
            {
                var str = from val in item.Value group val by val.Gender into itmgrp select new JourneyCalc { Gender = itmgrp.Key, JourneyCount = itmgrp.Count() };
                foreach (JourneyCalc jc in str)
                {
                    Console.WriteLine(value: $"{item.Value[0].From} - {item.Value[0].To} => {jc.Gender} - {jc.JourneyCount}");
                }
            } 



    public class JourneyCalc
    {
        public string From { get; set; }
        public string To { get; set; }
        public Gender Gender { get; set; }
        public int JourneyCount { get; set; }
    }
    public enum Gender
    {        
        MALE,
        FEMALE,
        CHILD
    }
    public class Journey
    {
        public string From { get; set; }
        public string To { get; set; }
        public Gender Gender { get; set; }

    }

Output:

Delhi - Mumbai => MALE - 4
Delhi - Mumbai => FEMALE - 1
Delhi - Mumbai => CHILD - 1
Mumbai - Mohili => FEMALE - 1
Mumbai - Mohili => CHILD - 2
List List=新列表();
添加(新旅程(){From=“德里”,To=“孟买”,Gender=Gender.MALE});
添加(新旅程(){From=“德里”,To=“孟买”,Gender=Gender.MALE});
添加(新旅程(){From=“德里”,To=“孟买”,Gender=Gender.FEMALE});
添加(新旅程(){From=“德里”,To=“孟买”,Gender=Gender.CHILD});
添加(新旅程(){From=“德里”,To=“孟买”,Gender=Gender.MALE});
添加(新旅程(){From=“德里”,To=“孟买”,Gender=Gender.MALE});
添加(新旅程(){From=“孟买”,To=“Mohili”,Gender=Gender.FEMALE});
添加(新旅程(){From=“Mumbai”,To=“Mohili”,Gender=Gender.CHILD});
添加(新旅程(){From=“Mumbai”,To=“Mohili”,Gender=Gender.CHILD});
var grp=list.GroupBy(s=>new{s.From,s.To}).ToDictionary(d=>d.Key,d=>d.Select(i=>newjourneycalc{From=i.From,To=i.To,Gender=i.Gender}).ToList();
foreach(grp中的var项目)
{
var str=from val in item.Value group val by val.Gender to itmgrp选择new JourneyCalc{Gender=itmgrp.Key,JourneyCount=itmgrp.Count()};
foreach(str中的JourneyCalc jc)
{
Console.WriteLine(值:$“{item.value[0]。From}-{item.value[0]。To}=>{jc.Gender}-{jc.JourneyCount}”);
}
} 
公共类日志计算
{
来自{get;set;}的公共字符串
{get;set;}的公共字符串
公共性别{get;set;}
public int JourneyCount{get;set;}
}
公共枚举性别
{        
男,,
女,,
小孩
}
公务舱旅程
{
来自{get;set;}的公共字符串
{get;set;}的公共字符串
公共性别{get;set;}
}
输出:
德里-孟买=>男-4
德里-孟买=>女性-1
德里-孟买=>儿童-1
孟买-Mohili=>女性-1
孟买-Mohili=>儿童-2

linq to entities]如何处理使用该
ToList
调用拆分查询?它(A)加载键并对计数发出后续3*N查询,还是(B)使用元素加载组并通过枚举计算其余的。当一个查询解决方案可用时,任何一种方法对我来说都是错误的。@AmyB它将
用元素加载组,并通过枚举计算其余的元素
,我不得不对查询进行轻微更改,结果成功了。下面是更新后的查询。var list=travelars.GroupBy(x=>new{x.From,x.To}).ToList().Select(e=>new{malecont=e.Count(g=>g.Gender==“M”)、femalecont=e.Count(g=>g.Gender==“F”)、ChildCount=e.Count(g=>g.Gender==“C”)、};非常感谢你的邀请help@AshwiniKumar那么改变呢?如何接受它作为答案,因为它确实帮助了我如果我也在这个列表中添加了class列,其中每一行都属于一个类,比如a、B、C、D,那么在应用GroupBy on和to列之后,我如何获得每个类中的男性、女性和儿童的计数?