C# Linq到实体和连接属性

C# Linq到实体和连接属性,c#,linq,c#-3.0,linq-to-entities,C#,Linq,C# 3.0,Linq To Entities,是否有人知道是否可以在现有实体类型上创建一个新属性,该实体类型基于连接在一起的其他两个属性 例如,我的个人实体类型有以下字段“ID”、“姓名”、“姓氏”、“DOB” 我想创建一个名为“Fullname”的新字段,它是 Forenames + " " + Surname 因此,我以“ID”、“名字”、“姓氏”、“DOB”、“全名”结尾 我知道我可以用Linq编程实现这一点 var results = from p in db.People select new { ID = p.ID, Fo

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

例如,我的个人实体类型有以下字段“ID”、“姓名”、“姓氏”、“DOB”

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

Forenames + " " + Surname
因此,我以“ID”、“名字”、“姓氏”、“DOB”、“全名”结尾

我知道我可以用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实体在概念模型级别为我完成这项工作。

还没有,但可能很快就会完成。首先,请注意,建议的查询在LINQtoEntities中根本不起作用,无论是否使用属性,因为目前它不支持Contains。然而,.NET4.0中实体框架的新版本应该支持LINQtoEntities查询中的自定义方法。你可以看到。基本上,您必须编写定制方法两次;一次在代码中,一次在数据库中(例如,在计算字段中)。有关更多信息,请参阅视频。

Craig

Sarted看了这段视频,然后意识到这段视频有一个多小时长,所以当我有更多时间的时候,我就不得不看了。只是想让你知道Contains对我来说似乎工作正常,以下是Linq to实体生成的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进行训练,上述情况为“Dave

谢谢
Dave

之所以包含“works”,是因为您调用的是String.Contains,而不是Craig认为的IEnumerable.Contains。

对于那些在问题被回答多年后偶然读到这篇文章的人来说:


这里有一个更现代、更符合干法的答案:

多奇怪。我已经证实了它不起作用,下面是MSDN文档,它说了同样的事情: