【发布时间】:2008-12-22 17:47:34
【问题描述】:
我正在使用 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 查询来完成此操作。任何建议将不胜感激。
【问题讨论】:
-
抛出异常是因为 Linq to Sql 试图将您的查询解析为表达式树,并且无法为您的正则表达式替换确定等效的 sql 命令,但似乎没有。跨度>
标签: c# regex linq linq-to-sql