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

时间:2009-11-14 12:46:04

标签: c# linq subsonic subsonic3 linqtemplates

我是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,
             };

我的问题有点类似于thisthis,只是我甚至没有加入;只是简单的选择。

非常感谢任何线索。

2 个答案:

答案 0 :(得分:1)

对此没有真正的答案。我经常遇到这个,然后没有。保持分配顺序与阅读顺序相同。即。在调试时,如果您看到QueryText并查看从db读取列的顺序。然后保持赋值与在QueryText中的SQL Select语句的顺序相同。 10次​​解决问题。

答案 1 :(得分:0)

请改为尝试:

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一如既往。