gpt4 book ai didi

c# - Regex Replace 以协助 LINQ 中的 Orderby

转载 作者:行者123 更新时间:2023-11-30 16:36:45 24 4
gpt4 key购买 nike

我正在使用 LINQ to SQL 从数据库中提取记录,按字符串字段对它们进行排序,然后对它们执行一些其他操作。不幸的是,我排序所依据的名称字段是这样从数据库中出来的

Name
ADAPT1
ADAPT10
ADAPT11
...
ADAPT2
ADAPT3

我想按数字顺序对名称字段进行排序。现在我正在使用 Regex 对象将“ADAPT1”替换为“ADAPT01”等。然后我使用另一个 LINQ 查询再次对记录进行排序。我的代码看起来像

    var adaptationsUnsorted = from aun in dbContext.Adaptations
where aun.EventID == iep.EventID
select new Adaptation
{
StudentID = aun.StudentID,
EventID = aun.EventID,
Name = Regex.Replace(aun.Name,
@"ADAPT([0-9])$", @"ADAPT0$1"),
Value = aun.Value
};

var adaptationsSorted = from ast in adaptationsUnsorted
orderby ast.Name
select ast;

foreach(Adaptation adaptation in adaptationsSorted)
{
// do real work
}

我遇到的问题是foreach循环抛出异常

System.NotSupportedException was unhandled
Message="Method 'System.String Replace(System.String, System.String,
System.String)' has no supported translation to SQL."
Source="System.Data.Linq"

我还想知道是否有更简洁的方法来仅使用一个 LINQ 查询来执行此操作。如有任何建议,我们将不胜感激。

最佳答案

通过枚举查询(调用 ToList)强制元素水合。从那时起,您的操作将针对内存中的对象,并且这些操作将不会转换为 SQL。

List<Adaptation> result =
dbContext.Adaptation
.Where(aun => aun.EventID = iep.EventID)
.ToList();

result.ForEach(aun =>
aun.Name = Regex.Replace(aun.Name,
@"ADAPT([0-9])$", @"ADAPT0$1")
);
result = result.OrderBy(aun => aun.Name).ToList();

关于c# - Regex Replace 以协助 LINQ 中的 Orderby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/386867/

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