Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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在列表中使用左连接_C#_Linq - Fatal编程技术网

C# 使用Linq c在列表中使用左连接

C# 使用Linq c在列表中使用左连接,c#,linq,C#,Linq,基本上我有一个由数据库填写的列表 public class Indicator { public string Month { get; set; } public Int NumberOfHouses { get; set; } public string City { get; set; } } 我进行查询和数据库建模的方式会花费很长时间,所以我尝试使用linq解决这个问题 我将永远在名单上有N个城市。我想重复它们,即使在没有来自相关数据库的月份记录的情况下。

基本上我有一个由数据库填写的列表

public class Indicator
{
     public string Month { get; set; }
     public Int NumberOfHouses { get; set; }
     public string City { get; set; }
}
我进行查询和数据库建模的方式会花费很长时间,所以我尝试使用linq解决这个问题

我将永远在名单上有N个城市。我想重复它们,即使在没有来自相关数据库的月份记录的情况下。类似于左连接的东西

如果我有这个:

Jan/2017      10      CityA
Jan/2017      12      CityB
Jan/2017      16      CityC
Dec/2016      33      CityC
Nov/2016      21      CityC
这是预期的结果:

Jan/2017      10      CityA
Jan/2017      12      CityB
Jan/2017      16      CityC
Dec/2016      0       CityA
Dec/2016      0       CityB
Dec/2016      33      CityC
Nov/2016      0       CityA
Nov/2016      0       CityB
Nov/2016      21      CityC
是否可以使用Linq解决此问题?

是的,这是可能的

// All the Indicator records
IQueryable<Indicator> data = _context.Indicators;

// All months from database 
IQueryable<string> months = data.Select(i => i.Month).Distinct();

// All cities
IQueryable<string> cities = data.Select(i => i.City).Distinct();

// Now your query
var results = (from string month in months
               from string city  in cities
               select new
               {
                  month = month,
                  city  = city,
                  count = data.Where(i => i.Month == month && i.City == city)
                              .Select(i => i.NumberOfHouses)
                              .FirstOrDefault() 
               }).ToList();

当一条记录丢失时,由.FirstOrDefault生成零,因为defaultint==0

是的,这是可能的,但您是否尝试过编写linq查询?@EhsanSajjad谢谢-但为时已晚,该死,已经回答了这个问题。他让我帮他做功课。“那可不酷,玛伦。”埃桑萨贾德是的,但不像布法贾普那样酷。我理解你的胡说八道,但我总是试图直接在SQL上解决这类问题。。我有一个解决方案,但没有使用Linq。这就是我寻求帮助的原因——寻求更干净更好的解决方案。谢谢一般来说,我觉得SQL更容易使用,而且它有更多的特性。我不会说Linq更干净或更好,但它是不同的。我同意你。。。但我需要的时间太多了。好吧,Linq是一个更快的解决方案:查询甚至可以再次返回指示符,而不是匿名类型。是的,我只是用一些OrderBy将通用列表再次更改为指示符。谢谢你。