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将通用列表再次更改为指示符。谢谢你。