SubSonic 3 LINQ proyectar los tipos anónimos, pero no los tipos de clases
-
20-09-2019 - |
Pregunta
Soy bastante nuevo en SubSonic 3 / LINQ, y no sé si me estoy perdiendo algo obvio, pero creo que me encontré con un problema de proyección. Estoy tratando de realizar la consulta más básica, y volver resultados apropiados sólo cuando utilizo los tipos anónimos. El momento en que los tipos anónimos intercambiar con los tipos de clases regulares, consigo todas las propiedades establecidas en nulo / nulo. Estoy elaboración de una biblioteca de clases DAL, por lo que lamentablemente los tipos anónimos no son una opción.
Fragmento
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; }
}
}
Así que esto no funciona (devuelve todos los valores nulos / ceros)
var fruits = from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName,
};
Esto funciona como se esperaba
var fruits = from f in db.Fruits
select new {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName,
};
Mi problema es algo similar a este y esta , sólo que no estoy haciendo incluso se une; selecciona simples.
Cualquier pistas serán apreciadas mucho.
No hay solución correcta
Otros consejos
No hay una respuesta real a esta. Me he encontrado con esto más a menudo entonces no. manteniendo el orden de asignación mismo que el orden de lectura de ayuda. es decir. en el tiempo de depuración si ve el QueryText y ver en qué orden las columnas se leen de db. y luego mantener la asignación mismo que el orden de SQL instrucción Select en QueryText. Resuelve el problema 9 de cada 10 veces.
Tal vez puedas probar:
IList<FruitView> fruits = (
from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName
}).ToList();
o
IQueryable<FruitView> fruits =
from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName
};
.. y foreach
como antes.