我是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,
};
我的问题有点类似于this和this,只是我甚至没有加入;只是简单的选择。
非常感谢任何线索。
答案 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
一如既往。