Domanda

Sono abbastanza nuovo per SubSonic 3 / LINQ, e non so se mi manca qualcosa ovvio, ma penso che mi sono imbattuto in un problema di proiezione. Sto cercando di eseguire la query più elementari, e tornare risultati corretti solo quando io uso i tipi anonimi. Nel momento in cui scambiare i tipi anonimi con i tipi di classe regolari, ho tutte le proprietà impostate su null / zero. Sto Crafting una libreria di classi DAL, così purtroppo tipi anonimi non sono un'opzione.

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

}

Quindi questo non funziona (restituisce tutta vuota / zeri)

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

Questo funziona come previsto

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

Il mio problema è in qualche modo simile a questo e questo , solo che non sto anche facendo unisce; solo semplici seleziona.

Eventuali indizi molto saranno apprezzate.

Nessuna soluzione corretta

Altri suggerimenti

Non c'è una vera risposta a questo. Ho incontrato questo più spesso poi non. mantenendo l'ordine di assegnazione uguale all'ordine di lettura aiuto. vale a dire. in tempo di debug se si vede la QUERYTEXT e vedere in quale ordine le colonne vengono letti dal db. e poi mantenere l'assegnazione stessa come l'ordine di Select SQL in QUERYTEXT. Risolve il problema 9 volte su 10.

Prova a modificare:

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

.. e foreach come prima.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top