EF CORE PostgreSQL-检查一个列表的所有元素是否包含在另一个列表中



我正在Entity框架中寻找一种方法来检查List的所有元素是否包含在另一个List中。

我的应用程序是.NET 6,我使用Npgsql查询我的PostgreSQL数据库,我有一个ID列表和一个类";公司";与另一个表相关";认证";。

公司类别如下:

public class Company
{
public int ID { get; set; }
public List<Certification> Certifications { get; set; }
...
}

我的认证等级是这样的:

public class Certification
{
public int ID { get; set; }
public int? CompanyID { get; set; }
public CertificationType Type { get; set; }
public int CategoryID { get; set; }
public virtual Category Category { get; set; }
public int? RankingID { get; set; }
public virtual Ranking Ranking { get; set; }
...
}

该查询是一个显示公司的分页查询,它必须在DB上执行(没有客户端查询(,我试图用LINQ编写它,但我得到了以下错误:

LINQ表达式'opt=>DbSet((.其中(c0=>EF.Property<int?>(EntityShaperExpression:ALPHUBs.ML.Models.CompanyValueBufferExpression:ProjectionBindingExpression:EmptyProjectionMemberIsNullable:False,";ID(!=空&amp;对象Equals(objA:(object(EF.Property<int>(EntityShaperExpression:ALPHUBs.ML.Models.CompanyValueBufferExpression:ProjectionBindingExpression:EmptyProjectionMemberIsNullable:False,";ID"(,objB:(object(EF。属性<int>(c0,"CompanyID"(((.选择(c0=>c0.CategoryID(.Any(p=>p==opt('无法翻译。以可翻译的形式重写查询,或者切换到客户端评估显式地通过插入对"AsEnumerable"、"AsAsyncEnumerable,"ToList"或"ToListAsync"。看见https://go.microsoft.com/fwlink/?linkid=2101038了解更多信息。

我尝试过这些方法:

IQueryable<Company> query = this._context.Companies.AsNoTracking()
.Include(c => c.Certifications)
.AsSplitQuery();
List<int> categoryList = new List<int>() { 1, 3, 5 };
//ATTEMPT 1
query.Where(c => categoryList.All(opt => c.Certifications.Select(cert => cert.CategoryID).Contains(opt)));
//ATTEMPT 2
query.Where(c => categoryList.Except(c.Certifications.Select(cert => cert.CategoryID)).Count() == 0);

我能让它工作的唯一方法是:

c.Certifications.Any(cert => categoryList.Contains(cert.CategoryID));

但这给了我错误的结果,因为我需要所有拥有所有认证的公司,而不是至少拥有一个认证的公司。

下面这样的东西怎么样:

var categoryList = new List<int> { 1, 3, 5 };
_ = ctx.Companies
.Where(c => c.Certifications.Count(c => categoryList.Contains(c.ID)) == categoryList.Count)
.ToList();

这假设对于给定的公司,最多只有一个具有给定ID的认证。

相关内容

  • 没有找到相关文章

最新更新