Subsonic 3 linq projizierende anonyme Typen, aber keine Klassentypen
-
20-09-2019 - |
Frage
Ich bin ziemlich neu in SubSonic 3/Linq und weiß nicht, ob mir etwas Offensichtliches fehlt, aber ich glaube, ich bin auf ein Projektionsproblem gestoßen. Ich versuche, die grundlegendste Abfrage auszuführen und die richtigen Ergebnisse zurückzubekommen, nur wenn ich anonyme Typen verwende. In dem Moment, in dem ich die anonymen Typen mit regulären Klassentypen tausche, lasse ich alle Eigenschaften auf Null/Null einstellen. Ich mache eine DAL -Klassenbibliothek, daher sind anonyme Typen leider keine Option.
Snippet
using System;
using System.Linq;
using Fruits.Data;
namespace FruitTest {
class Program {
static void Main(string[] args) {
var db = new FruitsDB();
var fruits = from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName,
};
foreach (var f in fruits) {
Console.WriteLine(f.MyFruitID + "\t" + f.MyFruitName);
}
}
}
public class FruitView {
public int MyFruitID { get; set; }
public string MyFruitName { get; set; }
}
}
Das funktioniert also nicht (gibt alle Nulls/Nullen zurück)
var fruits = from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName,
};
Dies funktioniert wie erwartet
var fruits = from f in db.Fruits
select new {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName,
};
Mein Problem ist etwas ähnlich wie Dies und Dies, Nur ich mache nicht einmal Joins; Nur einfach ausgewählt.
Alle Hinweise werden sehr geschätzt.
Keine korrekte Lösung
Andere Tipps
Es gibt keine wirkliche Antwort darauf. Ich habe das öfter begegnet als nicht. Halten Sie die Reihenfolge der Zuordnung wie die Reihenfolge der Leselementhilfe. dh. In der Debug -Zeit, wenn Sie den QueryText sehen und in welcher Reihenfolge die Spalten von DB gelesen werden. und behalten Sie die Zuordnung wie die Reihenfolge der SQL -Auswahlanweisung in QueryText auf. Löst das Problem 9 von 10 Mal.
Versuchen Sie es stattdessen:
IList<FruitView> fruits = (
from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName
}).ToList();
oder
IQueryable<FruitView> fruits =
from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName
};
..und foreach
wie vorher.