Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.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/5/sql/88.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# 我正在尝试将SQL查询转换为LINQ查询_C#_Sql_Linq - Fatal编程技术网

C# 我正在尝试将SQL查询转换为LINQ查询

C# 我正在尝试将SQL查询转换为LINQ查询,c#,sql,linq,C#,Sql,Linq,我正试图将获取A和B之间不同飞行路径的SQL查询转换为LINQ查询: SELECT F1.DepartingFromId, F1.ArrivingAtId FROM dbo.Flights AS F1 WHERE F1.DepartingFromId = 1 GROUP BY F1.ArrivingAtId, F1.DepartingFromId 如果我在上面的SQL中使用aforeach(机场中的机场),它将得到一个不同路径的列表,例如,路径a到B中只有一个 到目前为止,我已经

我正试图将获取A和B之间不同飞行路径的SQL查询转换为LINQ查询:

SELECT F1.DepartingFromId, F1.ArrivingAtId 
  FROM dbo.Flights AS F1 
 WHERE F1.DepartingFromId = 1 
 GROUP BY F1.ArrivingAtId, F1.DepartingFromId
如果我在上面的SQL中使用a
foreach(机场中的机场)
,它将得到一个不同路径的列表,例如,路径a到B中只有一个

到目前为止,我已经:

var dc = from flight in _DbContext.Flights
    where flight.DepartingFromId == airport.Id
    group flight by flight.ArrivingAtId
    into flightGroup
    select flightGroup;

foreach (var flightGroup in dc)
{
    foreach (var flight in flightGroup)
    {
        distinctFlights.Add(new DistinctConnection(flight.DepartingFromId, flight.ArrivingAtId));
    }
}
但是,这将返回数据库中的所有航班。大概有200000行。应该有大约70个不同的连接


任何帮助都将不胜感激,因为我是LINQ/Lambda的新手。

我不明白为什么这会返回所有航班,因为您正在过滤
where
条件
flight.DepartingFromId==airport.Id

要获取不同的,请选择

  • 将键值(
    g.key
    )分组为
    ArrivingAtId
  • 您在
    where
    子句(即
    airport.Id
    )中筛选的
    出发Id
像这样:

// Query for distinct connections from `airport.Id`.
var results = 
    from flight in _DbContext.Flights
    where flight.DepartingFromId == airport.Id
    group flight by flight.ArrivingAtId into g
    select new DistinctConnection(airport.Id, g.Key);

// Add them to the list.
distinctFlights.AddRange(results);

在我看来,这将是一种更清晰的方式——它避免了不必要的分组:

distinctFlights.AddRange(
(
    from flight in _DbContext.Flights
    where flight.DepartingFromId == airport.Id
    select flight.ArrivingAtId
)
    .Distinct()
    .ToArray()
    .Select(x => new DistinctConnection(airport.Id, x)));

这也会在数据库中生成有效的查询。

您是否检查了
出发Id
机场Id
值?PS:不清楚为什么需要
groupby
这里在SQL中使用
groupby
子句是没有意义的,因为没有聚合函数。使用
DISTINCT
关键字似乎更符合逻辑,这也正是您在LINQ中应该做的。是的,我非常确定这一部分没有问题,我认为LINQ中的group与SQL中的group by不同。虽然
group by
没有“错误”,但,它不是一个有用的应用程序,因为
groupby
的目的是方便聚合查询
DISTINCT
是查询不同记录时的正确关键字。对不起,我不反对,非常感谢您的评论。我只是说SQL并不是我真正的问题,它从LINQ得到的结果是相同的,这就是问题所在。我下面选择的答案有效。也谢谢你让我知道DISTINCE关键字,我以后会用它的。虽然我不得不改为感谢你的帮助,但这很有效。