gpt4 book ai didi

c# - RavenDB 按枚举排序

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

在对 RavenDB 进行查询时,是否可以对枚举进行排序或排序?也许通过提供 IComparable?

我已经尝试过了,但它似乎像枚举是一个字符串一样进行排序,并且将枚举存储为整数对我来说不起作用。

这是一个简单的例子:

public class Car
{
public long Id { get; set; }
public int NumberOfDoors { get; set; }
public int MaxSpeed { get; set; }
public Classification Classification { get; set; }
}

public enum Classification
{
Compact,
Hatch,
Convertible,
Muscle
}

我想按以下顺序分类:Muscle、Compact、Hatch、Convertible。我想避免重新排列枚举并将枚举存储为整数。

我已经试过了,但它似乎不起作用:

//My query
var cars = session.Query<Car>()
.OrderBy(c => c.Classification , new ClassificationComparer())
.Skip(offset)
.Take(size);


public class ClassificationComparer: IComparer<Classification>
{
public int Compare(Classification x, Classification y)
{
return Order(x).CompareTo(Order(y));
}

private int Order(Classification classification)
{

switch (classification)
{
case Classification.Compact:
return 0;
case Classification.Hatch:
return 1;
case Classification.Convertible:
return 2;
case Classification.Muscle:
return 3;
default:
return int.MaxValue;
}
}
}

感谢任何帮助。

最佳答案

您可能希望使用 this answer 中提出的解决方案这显示了如何使用底层 int 值将枚举持久保存在 RavenDB 中。

但是,如果您想将 Classification 属性保留为字符串并按 int 值对查询结果进行排序,一种可能的解决方案是:

创建一个映射现有汽车的索引并广告相应的 ClassificationId:

public class SortableCarIndex : AbstractIndexCreationTask<Car, SortableCar>
{
public SortableCarIndex()
{
Map = cars =>
from car in cars
select
new SortableCar
{
Car = car,
ClassificationId =
Array.IndexOf(new[]{
"Compact",
"Hatch",
"Convertible",
"Muscle"
}, car.Classification)
};
}
}

public class SortableCar
{
public Car Car { get; set; }
public int ClassificationId { get; set; }
}

确保索引存在于数据库中,在创建 DocumentStore 后使用以下代码行:

IndexCreation.CreateIndexes(typeof(SortableCarIndex).Assembly, documentStore);

索引创建后,可以这样查询:

    var carsOrderedByClassification =
session.Query<SortableCar, SortableCarIndex>()
.OrderBy(x => x.ClassificationId)
.AsProjection<Car>()
.ToList();

关于c# - RavenDB 按枚举排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19152099/

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