c# - Linq-To-SQL 查询中的 String.Split?

标签 c# .net linq linq-to-sql

我有一个包含 nvarchar 列的数据库表,如下所示:

1|12.6|18|19

我有一个具有 Decimal[] 属性的业务对象。

我的 LINQ 查询如下所示:

var temp = from r in db.SomeTable select new BusinessObject {
    // Other BusinessObject Properties snipped as they are straight 1:1
    MeterValues = r.MeterValues.Split('|').Select(Decimal.Parse).ToArray()
};
var result = temp.ToArray();

这会引发 NotSupportedException:方法“System.String[] Split(Char[])”没有支持的 SQL 转换。

这有点糟糕 :) 有什么方法可以做到这一点,而不必向业务对象添加字符串属性或选择匿名类型然后遍历它?

我目前的“解决方案”是:

var temp = from r in db.SomeTable select new {
    mv = r.MeterValues,
    bo = new BusinessObject { // all the other fields }
};
var result = new List<BusinessObject>();
foreach(var t in temp) {
    var bo = t.bo;
    bo.MeterValues = t.mv.Split('|').Select(Decimal.Parse).ToArray();
    result.Add(bo);
}
return result.ToArray(); // The Method returns BusinessObject[]

虽然临时列表有点难看。

我尝试添加 let mv = r.MeterValues.Split('|').Select(Decimal.Parse).ToArray() 但这本质上会导致相同的 NotSupportedException。

如果重要的话,这是 .net 3.5SP1。

最佳答案

您需要先调用 .AsEnumerable() 来强制 select 子句在客户端上运行:

var result = db.SomeTable.AsEnumerable().Select(r => new BusinessObject {
    ...
    MeterValues = r.MeterValues.Split('|').Select(Decimal.Parse).ToArray()
}).ToList();

关于c# - Linq-To-SQL 查询中的 String.Split?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4299979/

相关文章:

c# - 在 C# 中替代 Session 变量,我们可以使用类及其对象来存储值而不是 session 变量吗?

c# - 如何正确转义 Xml 文档中 <code> 示例的内容?

.net - 无法在 Windows 8.1 上安装 TCP 激活

c# - lambda 和 linq 表达式

c# - 检查重复项时如何返回列?

c# - RDLC 报告隐藏空白响应列

.net - .NET客户端不能使用绑定(bind)到通过引用使用STR-TRANSFORM算法签名的SAML 2.0身份声明的SOAP消息

ios - MonoTouch 中的 AesCryptoServiceProvider

c# - 声明 IEnumerable<T> 变量以供稍后使用

c# - List.ForEach 在技术上是 LINQ 的一部分吗?