gpt4 book ai didi

c# - 使用带有 Entity Framework 的动态字段按子记录排序

转载 作者:太空宇宙 更新时间:2023-11-03 16:18:49 24 4
gpt4 key购买 nike

我对使用 Entity Framework 对查询进行排序感兴趣,但在使用按表达式的动态顺序进行排序时遇到了问题,

我有一个父记录 (DatasetRecord),其一对多关系由多个关联值 (DatasetValues) 组成,如果它与某个字段匹配,我希望能够根据值中存储的数据进行排序,

所以我需要根据与提供的 FieldID 匹配的 DatasetValues 的值进行排序

public IEnumerable<DatasetRecordDto> FetchData(ModuleSettingsDto settings)
{
var query = _context.DatasetRecords.AsQueryable().Where(r => r.DatasetId == settings.DatasetId && r.IsDeleted == false);

foreach (var filter in settings.Filters)
{
// this works fine, check we have current field and value matches
query = query.Where(i => i.DatasetValues.Any(x => x.DatasetFieldId == filter.DatasetFieldId && x.Value == filter.Value));
}

foreach (var sort in settings.Sort)
{
switch (sort.SortDirection)
{
case "asc":
// THIS IS WHERE I NEED THE DYNAMIC ORDER BY EXPRESSION,
// THIS SHOULD SORT BY DATETIME WHERE FIELD ID MATCHES
query = query.OrderBy(i => i.DatasetValues.Any(x => x.ValueDateTime && x.DatasetFieldId == sort.DatasetFieldId));
break;
}

}

return ShapeResults(query);
}

这是我的数据库架构:

CREATE TABLE [dbo].[DatasetRecords](
[Id] [int] IDENTITY(1,1) NOT NULL,
[DatasetId] [int] NOT NULL
)

CREATE TABLE [dbo].[DatasetFields](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Label] [varchar](50) NOT NULL,
[DatasetId] [int] NULL,
[DataType] [int] NOT NULL
)

CREATE TABLE [dbo].[DatasetValues](
[Id] [int] IDENTITY(1,1) NOT NULL,
[DatasetRecordId] [int] NOT NULL,
[DatasetFieldId] [int] NOT NULL,
[ValueString] [varchar](8000) NULL,
[ValueInt] [int] NULL,
[ValueDateTime] [datetime] NULL,
[ValueDecimal] [decimal](18, 2) NULL,
[ValueBit] [bit] NULL
)

如果您需要任何进一步的信息,请告诉我,非常感谢您的帮助,

更新:我没有按表达式创建动态顺序的问题,我正在尝试根据子表中的值对父记录应用条件排序

最佳答案

您是否尝试过在 LinqPad 之类的东西上运行 Linq 代码,它可以让您针对数据集运行 Linq 代码并向您显示生成的 SQL。您可以采用该 SQL 并手动运行它,以确保不是某些无效的 SQL 导致了错误。

关于c# - 使用带有 Entity Framework 的动态字段按子记录排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14741765/

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