6

有谁知道是否可以在现有实体类型上创建一个新属性,该实体类型基于连接在一起的 2 个其他属性?

例如,我的人实体类型有这些字段“ID”、“名字”、“姓氏”、“出生日期”

我想创建一个名为“全名”的新字段,它是

Forenames + " " + Surname

所以我最终得到“ID”、“Forename”、“Surname”、“DOB”、“Fullname”。

我知道我可以以编程方式使用 Linq 来做到这一点,即

var results = from p in db.People
select new { 
ID = p.ID, 
Forename = p.Forename, 
Surname = p.Surname, 
DOB = p.DOB,
Fullname = p.Forename+ " " + p.Surname
};

然后调用类似的东西

var resultsAfterConcat = from q in results 
where q.Fullname.Contains(value)
select q;

但是,我真的很想在概念模型级别使用 Linq to Entities 为我完成这项工作。

4

4 回答 4

4

还没有,但也许很快。首先,请注意,无论有没有该属性,您建议的查询在 LINQ to Entities 中都不起作用,因为目前它不支持包含。但是,.NET 4.0 中的新版本实体框架应该支持 LINQ to Entities 查询中的自定义方法。您可以从 PDC 观看有关此的视频。本质上,您必须编写两次自定义方法;一次在代码中,一次在您的数据库中(例如,在计算字段中)。有关更多信息,请参阅视频。

于 2008-11-18T18:06:01.987 回答
3

对于任何在问题得到解答多年后偶然阅读此书的人:

这里有一个更新和更符合 DRY 的答案:Using a partial class property inside LINQ statement

于 2012-01-26T03:37:53.827 回答
2

包含对您“有效”的原因是因为您调用的是 String.Contains,而不是 Craig 认为的 IEnumerable.Contains。

于 2009-05-21T20:19:25.560 回答
0

克雷格,

Sarted看了视频,然后意识到它有一个多小时的时间,所以当我有更多时间时必须观看它。只是想让你知道.. Contains对我来说似乎工作正常,这是由 Linq to Entities 生成的 SQL:

SELECT 
1 AS [C1], 
[Extent1].[PeopleID] AS [PeopleID], 
[Extent1].[Forenames] AS [Forenames], 
[Extent1].[Surname] AS [Surname]
FROM [dbo].[People] AS [Extent1]
WHERE (CHARINDEX(N'Dave', [Extent1].[Forenames] + N' ' + [Extent1].[Surname])) > 0

这似乎是一种享受。如果 Concatinated 字段包含输入的文本,即上述情况是“ Dave ”,则使用CHARINDEX进行锻炼。

谢谢戴夫

于 2008-11-19T13:29:45.990 回答