将两个linq查询连接到一个查询

本文关键字:查询 一个 连接 两个 linq | 更新日期: 2023-09-27 18:13:26

我有以下linq查询。将两者连接到一个查询的最佳方法是什么?

List<string> consumerids = plays.Where(w => w.playyear == group_period.year 
                                         && w.playmonth == group_period.month 
                                         && w.sixteentile == group_period.group)
                                .Select(c => c.consumerid)
                                .ToList();

int groupcount = plays.Where(w => w.playyear == period.playyear 
                               && w.playmonth == period.playmonth 
                               && w.sixteentile == group 
                               && consumerids.Any(x => x == w.consumerid))
                      .Count();

请注意,这两个查询即使有一个相似的where子句在它们中使用不同的值(例如。group_period.yearperiod.playyear)

将两个linq查询连接到一个查询

如果这两个查询做不同的事情,您可以将它们分开。这样更容易读懂。

你可以做的改进是使这两个查询在数据库中作为一个查询执行。

所有你需要做的是删除ToList():

您也可以将第二个Where的谓词作为Count的谓词

var consumerids = plays.Where(w => w.playyear == group_period.year &&
                                   w.playmonth == group_period.month &&
                                   w.sixteentile == group_period.group)
                       .Select(c => c.consumerid);
int groupcount = plays.Count(w => w.playyear == period.playyear &&
                                  w.playmonth == period.playmonth &&
                                  w.sixteentile == group &&
                                  consumerids.Any(x => x == w.consumerid));