gpt4 book ai didi

c# - EF Core 5 包含多个列

转载 作者:行者123 更新时间:2023-12-05 04:48:44 24 4
gpt4 key购买 nike

我有两个看起来像这样的模型:

public class Filter
{
public string Key {get;set;}
public Guid ProgramId {get;set;}
}

public class MyEntity
{
public string Name {get;set;}
public string Key {get;set;}
public Guid ProgramId {get;set;}
}

我想获取所有 MyEntity,其中 KeyProgramId 在列表中至少出现一次。 KeyProgramId 的组合是至关重要的,因为 KeyProgramId 可以存在于不同的 Filter 在不同的联盟中。因此 KeyProgramId 必须匹配。

我的代码看起来像这样:

// Initiation of filters is obviously different, but it could look something like this
var filters = new []
{
new Filter { Key = "1", ProgramId = Guid.NewGuid() },
new Filter { Key = "2", ProgramId = Guid.NewGuid() }
}

我试过以下方法。如果在内存中进行评估,所有示例都会给出我想要的结果,但没有一个可以作为 SQL 执行/翻译。

备选方案 1。基于 this question :

var concatFilters = filters.Select(x => x.Key + "_" + x.ProgramId).ToArray();
var result = myContext.MyTable.Where(x => concatFilters.Contains(x.Key + "_" + x.ProgramId));
// It gives: Arithmetic overflow error converting expression to data type nvarchar.

备选方案 2:

var filterPrograms = filters.Select(x => new { Key = x.Key, ProgramId = x.ProgramId }).ToArray();  
var query = myContext.MyTable.Where(x => filterPrograms.Contains( new { Key = x.Key, ProgramId = x.ProgramId} ));
// It cannot be translated.

备选方案 3:

var query = myContext.MyTable.Where(x => filters.Any(y => y.Key == x.Key && y.ProgramId == x.ProgramId));
// It cannot be translated.

我使用分页,需要在 SQL 中对其进行评估,以便我的分页正常工作。我正在使用 EF Core 5.0.6 运行 .NET 5。有什么想法吗?

最佳答案

使用this我对扩展方法 FilterByItems 的回答。然后您可以执行以下操作:

var filters = new []
{
new Filter { Key = "1", ProgramId = Guid.NewGuid() },
new Filter { Key = "2", ProgramId = Guid.NewGuid() }
};

var result = myContext.MyTable
.FilterByItems(filters, (x, f) => x.Key == f.Key && x.ProgramId == f.ProgramId, true);

关于c# - EF Core 5 包含多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67934374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com