【发布时间】:2009-11-14 12:46:03
【问题描述】:
我对 SubSonic 3/Linq 相当陌生,不知道我是否遗漏了一些明显的东西,但我想我遇到了投影问题。我正在尝试执行最基本的查询,并且只有在使用匿名类型时才能返回正确的结果。当我将匿名类型与常规类类型交换时,我将所有属性设置为空/零。我正在制作一个 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,只是我什至没有做join;只是简单的选择。
任何线索将不胜感激。
【问题讨论】:
-
顺便说一句,我正在为 Core 和 LinqTemplates 使用最新的 GitHub 位。
-
是的。这也是我遇到的一个bug。反而很烦人。我得到结果的唯一方法是在结果上使用 ForEach 将它们保存在一个新列表中。
-
@Yogesh:是的,这就是我目前正在使用的解决方法。它的问题是你在这个过程中失去了惰性执行:(
-
这里有些严重错误。那是您使用的确切代码吗?因为几个流氓逗号暗示了其他情况。
-
cottsak,如果您指的是 f.FruitName 之后的逗号,显然这是有效的语法。我在 T4MVC 的设置文件中看到了这一点。由于编译器似乎忽略了额外的尾随逗号,我觉得把它留在那里很方便。这样所有行都遵循相同的格式,我不必记住总是删除最后一个逗号。我尝试删除它只是为了确保,果然,它没有任何区别。
标签: c# linq subsonic subsonic3 linqtemplates