Linq to Entities和连接属性

时间:2008-11-18 16:35:43

标签: c# linq c#-3.0 linq-to-entities

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

E.g。我的人员实体类型包含以下字段“ID”,“Forename”,“Surname”,“DOB”

我想创建一个名为“Fullname”的新字段,即

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 个答案:

答案 0 :(得分:4)

还没有,但也许很快。首先,请注意,建议的查询在LINQ to Entities中根本不起作用,有或没有属性,因为目前它不支持Contains。但是,.NET 4.0中新版本的Entity Framework应该支持LINQ to Entities查询中的自定义方法。你可以看到a video about this from PDC。基本上,你必须两次编写自定义方法;一次在代码中,一次在您的数据库上(例如,在计算字段中)。有关详细信息,请参阅视频。

答案 1 :(得分:3)

对于在问题得到解答后这么多年来发生这种情况的人来说:

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

答案 2 :(得分:2)

包含“作品”的原因是因为你正在调用String.Contains而不是IEnumerable.Contains,就像Craig想的那样。

答案 3 :(得分:0)

克雷格,

观看视频,然后意识到它已经超过一个小时,所以当我有更多时间时,必须观看它。只是为了让你知道.. 包含 似乎对我有用,这是由Linq生成的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

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

由于 戴夫