SubSonic 3 Linq投射匿名类型而不是类类型

我是SubSonic 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读取列的顺序。 然后保持赋值与在QueryText中的SQL Select语句的顺序相同。 10次​​解决问题9次。

试试这个:

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

要么

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

和以前一样。