Subsonic 3 LINQ Проецируя анонимные типы, но не типы классов
-
20-09-2019 - |
Вопрос
Я довольно новичок в дозвуковом 3/LINQ и не знаю, упускаю ли я что -то очевидное, но я думаю, что столкнулся с проблемой проекции. Я пытаюсь выполнить самый основной запрос и возвращать правильные результаты только тогда, когда я использую анонимные типы. В тот момент, когда я обменяю анонимные типы на обычные типы классов, я получаю все свойства, установленные на NULL/Zero. Я создаю библиотеку классов DAL, поэтому, к сожалению, анонимные типы не являются вариантом.
Фрагмент
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; }
}
}
Так что это не работает (возвращает все нули/нули)
var fruits = from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName,
};
Это работает как ожидалось
var fruits = from f in db.Fruits
select new {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName,
};
Моя проблема несколько похожа на это а также это, только я даже не делаю объединения; Просто простые выбора.
Любые подсказки будут высоко оценены.
Нет правильного решения
Другие советы
На это нет реального ответа. Я сталкивался с этим чаще, чем нет. Сохранение порядка назначения такого же, как и заказ помощи в чтении. т.е. В время отладки, если вы видите QueryText и видите в каком порядке столбцы читаются из DB. и затем сохраните задание таким же, как и порядок оператора SQL SELECT в QueryText. Решает проблему 9 из 10 раз.
Попробуйте вместо этого:
IList<FruitView> fruits = (
from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName
}).ToList();
или же
IQueryable<FruitView> fruits =
from f in db.Fruits
select new FruitView {
MyFruitID = f.FruitID,
MyFruitName = f.FruitName
};
..а также foreach
как прежде.