不确定正确的术语,但有没有办法在Entity Framework 5 LINQ查询中包含表中不存在的“编码字段”?
例如,在SQL中,您可以这样做:
SELECT 'Ledger' AS type, (...) FROM table
这样查询结果就会包含一个名为'type'的字段,其值为'Ledger'。有没有办法在LINQ查询中执行此操作?
在你问为什么它必须在查询中之前,这是因为查询是多个表的联合,我需要指定数据来自哪个表。如果没有这个,我将需要分别查询每个,然后合并它们。
答案 0 :(得分:3)
当然,你可以。看起来有点像这样:
var results = dbContext.Table.Select(r => new { type = "Ledger", ... });
或者如果你需要一个命名类型,这样的东西应该可以工作:
public class UnionResult
{
string Type { get; set; }
...
}
var results = dbContext.Table.Select(r => new UnionResult { Type = "Ledger", ... });
答案 1 :(得分:3)
是的,你可以完全做到这一点。
p.s.w.g使用了一种叫做匿名类型的东西。基本上,您可以动态定义查询的结果。
正如您在答案中所看到的,在表达式语法中,这看起来像Select(r => new { type = "Ledger", ... });
在查询语法中,它看起来像这样:
from xxx in y
select new { type = "Ledger" };
在新的背后,没有类/类型或任何东西。两种类型都没有定义。但它会自然地编译成一个字符串。
另一方面,您可以为此
定义自定义ViewModel类public class CustomResultVM
{
//ignoring getter and setter
public int Id;
public string type;
public string name;
}
您的选择现在将是强类型的,如下所示:
Select(r => new CustomResultVM
{
Id = r.xxx,
type = "Ledger",
Name = r.xxxx
});
//query snytax
from xxx in y
select new CustomResultVM
{
Id = r.xxx,
type = "Ledger",
Name = r.xxxx
};
这两种方式都是有效的,它取决于您在任何给定时间点所需的内容。