是否有人知道是否可以在现有实体类型上创建新属性,该实体类型基于连接在一起的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在概念模型级别为我做这项工作。
答案 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 ”。
由于 戴夫