2008-11-18 135 views
6

有誰知道是否有可能在基於2個其他屬性連接在一起的現有實體類型上創建新屬性?Linq to Entities和級聯屬性

E.g.我一個人實體類型具有這些字段「ID」,「用的名字」,「姓氏」,「出生日期」

我想創建一個名爲「全名」,這是

Forenames + " " + Surname 

所以我最終新領域有「ID」,「Forename」,「姓氏」,「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到實體在做這個工作對我來說概念模型層面。

回答

4

還沒有,但可能很快。首先,請注意,您的建議查詢在LINQ to Entities中完全不起作用,有或沒有該屬性,因爲目前它不支持Contains。但是,.NET 4.0中的新版本實體框架應該支持LINQ to Entities查詢中的自定義方法。你可以看到a video about this from PDC。實質上,你必須編寫自定義方法兩次;一次在代碼中,一次在數據庫中(例如,在計算的字段中)。觀看視頻瞭解更多信息。

0

克雷格,

Sarted看視頻,然後意識到這是一個多小時長,所以必須看它時,我有更多的時間。只是爲了讓你雖然知道.. 包含似乎是工作確定對我來說,這裏是一個的通過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鍛鍊,如果串連字段包含輸入的文本是上述情況判斷爲「戴夫」。

感謝 戴夫

+0

真奇怪。我已經驗證了自己,它不起作用,以下是MSDN文檔,它說明了同樣的事情:http://msdn.microsoft.com/zh-cn/library/bb738638.aspx – 2008-11-21 13:36:03

2

之所以包含「作品」你是因爲你調用String.Contains,而不是IEnumerable.Contains,克雷格認爲。