在LINQ查询中包含编码字段值(EF 5)

时间:2013-11-21 21:30:36

标签: c# sql linq entity-framework

不确定正确的术语,但有没有办法在Entity Framework 5 LINQ查询中包含表中不存在的“编码字段”?

例如,在SQL中,您可以这样做:

SELECT 'Ledger' AS type, (...) FROM table

这样查询结果就会包含一个名为'type'的字段,其值为'Ledger'。有没有办法在LINQ查询中执行此操作?

在你问为什么它必须在查询中之前,这是因为查询是多个表的联合,我需要指定数据来自哪个表。如果没有这个,我将需要分别查询每个,然后合并它们。

2 个答案:

答案 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 
       };

这两种方式都是有效的,它取决于您在任何给定时间点所需的内容。