Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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# 使用带有实体框架的动态字段按子记录排序_C#_Asp.net Mvc_Linq_Entity Framework_Ado.net - Fatal编程技术网

C# 使用带有实体框架的动态字段按子记录排序

C# 使用带有实体框架的动态字段按子记录排序,c#,asp.net-mvc,linq,entity-framework,ado.net,C#,Asp.net Mvc,Linq,Entity Framework,Ado.net,我对使用实体框架对查询进行排序感兴趣,但在使用动态按表达式排序时遇到困难 我有一个具有一对多关系的父记录(DatasetRecord),该关系由多个关联值(DatasetValues)组成,如果它与某个字段匹配,我希望能够根据存储在该值中的数据进行排序 因此,我需要按DatasetValues的值进行排序,它与提供的FieldID匹配 public IEnumerable<DatasetRecordDto> FetchData(ModuleSettingsDto settings)

我对使用实体框架对查询进行排序感兴趣,但在使用动态按表达式排序时遇到困难

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

因此,我需要按DatasetValues的值进行排序,它与提供的FieldID匹配

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);
}
如果您需要任何进一步的信息,请告诉我,非常感谢您的帮助


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

您是否尝试在类似LinqPad的东西上运行Linq代码,它允许您对数据集运行Linq代码并显示生成的SQL。您可以获取该SQL并手动运行,以确保它不是导致错误的无效SQL。

您是否看到了以下内容:
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
)