Tengo una tabla de base de datos que contiene una columna nvarchar así:String.Split en una consulta Linq-To SQL?
1|12.6|18|19
que tienen un objeto de negocio que tiene un decimal [] propiedad.
Mi consulta LINQ se ve así:
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();
Esto arroja una NotSupportedException: Method 'System.String[] Split(Char[])' has no supported translation to SQL.
que aspira un poco :) ¿Hay alguna manera de hacer esto sin tener que añadir una propiedad de cadena a la objeto comercial o seleccionando un tipo anónimo y luego iterando a través de él?
Mi "solución" actual es:
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[]
Eso es un poco fea, sin embargo, con esa lista temporal.
He intentado añadir un let mv = r.MeterValues.Split('|').Select(Decimal.Parse).ToArray()
pero que conduce esencialmente a la misma NotSupportedException.
Ésta es 3.5SP1 .net si lo que importa.
¿Eso seleccionar toda la tabla alguna_tabla sin embargo? –
@Michael: Sí. Debe seleccionar la tabla completa de todos modos. Si solo necesita un subconjunto de los campos, puede poner un 'Seleccionar' inicial antes del' .AsEnumerable'. – SLaks
Sí, esto no es ideal, básicamente ejecutará un "SELECT * FROM SomeTable". ¿L2SQL es compatible con UDF? EF lo hace (creo). Si es así, usted podría hacer que el lado del servidor de división (por ejemplo UDF) – RPM1984