Pergunta

Sou bastante novo no Subsonic 3/Linq e não sei se estou perdendo algo óbvio, mas acho que encontrei um problema de projeção. Estou tentando executar a consulta mais básica e recuperar os resultados adequados apenas quando uso tipos anônimos. No momento em que troco os tipos anônimos com tipos de classe regulares, recebo todas as propriedades definidas como NULL/ZERO. Estou criando uma biblioteca de classes DAL, então, infelizmente, os tipos anônimos não são uma opção.

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; }
    }

}

Portanto, isso não funciona (retorna todos os nulos/zeros)

var fruits = from f in db.Fruits
             select new FruitView {
                 MyFruitID = f.FruitID,
                 MyFruitName = f.FruitName,
             };

Isso funciona como esperado

var fruits = from f in db.Fruits
             select new {
                 MyFruitID = f.FruitID,
                 MyFruitName = f.FruitName,
             };

Meu problema é um pouco semelhante a isto e isto, apenas eu nem estou fazendo junções; Apenas selecionamentos simples.

Qualquer pista será muito apreciada.

Nenhuma solução correta

Outras dicas

Não há resposta real para isso. Eu encontrei isso com mais frequência do que não. Manter a ordem de atribuição igual à ordem de ajuda de leitura. ou seja. no tempo de depuração, se você vir o Querytext e ver em que ordem as colunas são lidas no banco de dados. e depois mantenha a atribuição igual à ordem da instrução SQL Select no Querytext. Resolve o problema 9 das 10 vezes.

Tente isso em vez disso:

IList<FruitView> fruits = (
         from f in db.Fruits
             select new FruitView {
                 MyFruitID = f.FruitID,
                 MyFruitName = f.FruitName
             }).ToList();

ou

IQueryable<FruitView> fruits = 
         from f in db.Fruits
             select new FruitView {
                 MyFruitID = f.FruitID,
                 MyFruitName = f.FruitName
             };

..e foreach como antes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top