我有一个包含 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/