String.Aufgeteilt in eine Linq-To-SQL-Abfrage?

Ich habe eine Datenbank-Tabelle, die enthält eine nvarchar-Spalte wie folgt:

1|12.6|18|19

Habe ich ein Business-Objekt, das hat einen Decimal [] - Eigenschaft.

Meine LINQ-Abfrage wie folgt aussieht:

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();

Dieser löst eine NotSupportedException: Method 'System.String[] Split(Char[])' has no supported translation to SQL.

Das ein bisschen nervt 🙂 gibt es eine Möglichkeit, kann ich dies tun, ohne dass Sie eine string-Eigenschaft, um die business-Objekt oder die Auswahl eines anonymen Typs und dann Durchlaufen Sie?

Meine aktuelle "Lösung" ist:

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[]

Ziemlich hässlich aber mit, dass die temporäre Liste.

Ich habe versucht, das hinzufügen einer let mv = r.MeterValues.Split('|').Select(Decimal.Parse).ToArray() aber das führt im wesentlichen zu den gleichen NotSupportedException.

Dies ist .net 3.5SP1, wenn diese Angelegenheiten.

InformationsquelleAutor Michael Stum | 2010-11-29
Schreibe einen Kommentar