Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.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查询并将其用于更复杂的LINQ查询_C#_.net_Linq_Linq To Entities - Fatal编程技术网

C# 如何筛选一个简单的LINQ查询并将其用于更复杂的LINQ查询

C# 如何筛选一个简单的LINQ查询并将其用于更复杂的LINQ查询,c#,.net,linq,linq-to-entities,C#,.net,Linq,Linq To Entities,我的一个函数中有这个逻辑,但它对数据库有3次往返。如何将查询转换为只对数据库进行一次查询 var saisonTouristiqueId = 1; var currentSaison = this.appContext.SaisonTouristiques.FirstOrDefault(x => x.SaisonTouristiqueId == saisonTouristiqueId); var nextSaison = (from saison in this.appContext.S

我的一个函数中有这个逻辑,但它对数据库有3次往返。如何将查询转换为只对数据库进行一次查询

var saisonTouristiqueId = 1;
var currentSaison = this.appContext.SaisonTouristiques.FirstOrDefault(x => x.SaisonTouristiqueId == saisonTouristiqueId);

var nextSaison = (from saison in this.appContext.SaisonTouristiques
                  where saison.DebutSaison > currentSaison.FinSaison
                  orderby saison.DebutSaison
                  select saison).FirstOrDefault();

if (nextSaison != null)
{
    var forfaits = from forfait in this.appContext.Forfaits
                   where forfait.ComposantForfaits.Any(x => x.SaisonTouristiqueId == nextSaison.SaisonTouristiqueId)
                   select forfait;

    return forfaits.ToList();
}

仅在后续查询中使用
FirstOrDefault
,以允许延迟所有执行

var saisonTouristiqueId = 1;
var currentSaison = this.appContext.SaisonTouristiques
    .Where(x => x.SaisonTouristiqueId == saisonTouristiqueId);

var nextSaison = from saison in this.appContext.SaisonTouristiques
                    where saison.DebutSaison > currentSaison.FirstOrDefault().FinSaison
                    orderby saison.DebutSaison
                    select saison;

var forfaits = from forfait in this.appContext.Forfaits
                where forfait.ComposantForfaits.Any(x => x.SaisonTouristiqueId == nextSaison.FirstOrDefault().SaisonTouristiqueId)
                select forfait;

return forfaits.ToList();

我想你可以用join@COLDTOLD考虑到他在做什么,我不明白你怎么能这么做。也许交叉连接我没有意识到他的两个查询都在一张表上