C# 在LINQ查询中包括编码字段值(EF 5)
不确定术语是否正确,但是否有办法在Entity Framework 5 LINQ查询中包含表中不存在的“编码字段” 例如,在SQL中,可以执行以下操作:C# 在LINQ查询中包括编码字段值(EF 5),c#,sql,linq,entity-framework,C#,Sql,Linq,Entity Framework,不确定术语是否正确,但是否有办法在Entity Framework 5 LINQ查询中包含表中不存在的“编码字段” 例如,在SQL中,可以执行以下操作: SELECT 'Ledger' AS type, (...) FROM table 因此,查询结果包括一个名为“type”的字段,其值为“Ledger”。在LINQ查询中是否有这样做的方法 在您询问为什么必须在查询中之前,这是因为查询是多个表的并集,我需要指定数据来自哪个表。如果没有这个,我需要分别查询每一个,然后合并它们。当然可以。它看起来
SELECT 'Ledger' AS type, (...) FROM table
因此,查询结果包括一个名为“type”的字段,其值为“Ledger”。在LINQ查询中是否有这样做的方法
在您询问为什么必须在查询中之前,这是因为查询是多个表的并集,我需要指定数据来自哪个表。如果没有这个,我需要分别查询每一个,然后合并它们。当然可以。它看起来有点像这样:
var results = dbContext.Table.Select(r => new { type = "Ledger", ... });
from xxx in y
select new { type = "Ledger" };
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
};
或者,如果您需要一个命名类型,类似这样的方法应该可以工作:
public class UnionResult
{
string Type { get; set; }
...
}
var results = dbContext.Table.Select(r => new UnionResult { Type = "Ledger", ... });
当然可以。它看起来有点像这样:
var results = dbContext.Table.Select(r => new { type = "Ledger", ... });
from xxx in y
select new { type = "Ledger" };
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
};
或者,如果您需要一个命名类型,类似这样的方法应该可以工作:
public class UnionResult
{
string Type { get; set; }
...
}
var results = dbContext.Table.Select(r => new UnionResult { Type = "Ledger", ... });
是的,你完全可以做到 p、 s.w.g使用了一种叫做匿名类型的东西。基本上,您可以动态地定义查询的结果。 正如您在他的回答中所看到的,在表达式语法中,这看起来像
Select(r=>new{type=“Ledger”,…})代码>
在查询语法中,它如下所示:
var results = dbContext.Table.Select(r => new { type = "Ledger", ... });
from xxx in y
select new { type = "Ledger" };
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
};
在new之后,没有类/类型或任何东西。两者都没有定义类型。但它会自然地编译为字符串
另一方面,您可以为此定义自定义ViewModel类
public class CustomResultVM
{
//ignoring getter and setter
public int Id;
public string type;
public string name;
}
您的select现在将是强类型的,如下所示:
var results = dbContext.Table.Select(r => new { type = "Ledger", ... });
from xxx in y
select new { type = "Ledger" };
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
};
这两种方法都是有效的,这取决于您在任何给定的时间点需要什么。是的,您完全可以这样做
p、 s.w.g使用了一种叫做匿名类型的东西。基本上,您可以动态地定义查询的结果。
正如您在他的回答中所看到的,在表达式语法中,这看起来像Select(r=>new{type=“Ledger”,…})代码>
在查询语法中,它如下所示:
var results = dbContext.Table.Select(r => new { type = "Ledger", ... });
from xxx in y
select new { type = "Ledger" };
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
};
在new之后,没有类/类型或任何东西。两者都没有定义类型。但它会自然地编译为字符串
另一方面,您可以为此定义自定义ViewModel类
public class CustomResultVM
{
//ignoring getter and setter
public int Id;
public string type;
public string name;
}
您的select现在将是强类型的,如下所示:
var results = dbContext.Table.Select(r => new { type = "Ledger", ... });
from xxx in y
select new { type = "Ledger" };
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
};
这两种方法都是有效的,这取决于您在任何给定的时间点需要什么。您不应该将类设计基于数据库模式。特别是当您将对象传递到更高的层时。@P.Brian.Mackey不是,我有一个用于报表的业务层类,我正试图将查询结果填充到该类中。您不应该将类设计基于数据库架构。特别是当您将对象传递到更高的层时。@P.Brian.Mackey不是,我有一个报告的业务层类,我正试图将查询结果填充到其中。+1,因为这是他要求的。但是很难想象在单片应用程序之外,匿名类型是正确的解决方案。因为他们不能被归还。@P.Brian.Mackey很公平。我已经更新了我的答案,以包含一个命名类型作为替代项。@p.s.w.g.这使我们两个都是。我明确地回答了我自己,因为我认为,扩展你的答案是一个好主意。我希望我能把这两个都标记为答案。我真不敢相信我没有想到这一点。因为这是他要求的。但是很难想象在单片应用程序之外,匿名类型是正确的解决方案。因为他们不能被归还。@P.Brian.Mackey很公平。我已经更新了我的答案,以包含一个命名类型作为替代项。@p.s.w.g.这使我们两个都是。我明确地回答了我自己,因为我认为,扩展你的答案是一个好主意。我希望我能把这两个都标记为答案。真不敢相信我居然没想到这个。