2008-11-18 4 views
6

Weiß jemand, ob es möglich ist, eine neue Eigenschaft auf einem bestehenden Entitätstyp zu erstellen, der auf 2 anderen zusammenhängenden Eigenschaften basiert?Linq zu Entities und verketteten Eigenschaften

z. Meine Person Entitätstyp hat diese Felder „ID“, „Vorname“, „Nachname“, „DOB“

Ich möchte ein neues Feld namens „Vollständiger Name“, die

ist
Forenames + " " + Surname 

Also ich am Ende mit "ID", "Vorname", "Nachname", "DOB", "Fullname".

weiß, dass ich mich dies mit Linq also programmatisch tun kann

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 
}; 

Dann etwas Aufruf wie

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

aber ich wirklich Linq to Entities verwenden möchte für mich, diese Arbeit zu tun an die konzeptionelle Modellstufe.

Antwort

4

Noch nicht, aber vielleicht bald. Beachten Sie zunächst, dass die vorgeschlagene Abfrage in LINQ to Entities mit oder ohne Eigenschaft überhaupt nicht funktioniert, da sie Contains derzeit nicht unterstützt. Die neue Version von Entity Framework in .NET 4.0 soll jedoch benutzerdefinierte Methoden in LINQ to Entities-Abfragen unterstützen. Sie können a video about this from PDC sehen. Im Wesentlichen müssen Sie die benutzerdefinierte Methode zweimal schreiben; einmal im Code und einmal in Ihrer Datenbank (z. B. in einem berechneten Feld). Sehen Sie das Video für weitere Informationen.

0

Craig,

Sarted das Video ansehen, dann erkannte es ist mehr als eine Stunde lang, so wird es zu sehen, wenn ich mehr Zeit habe. obwohl nur damit Sie wissen .. Enthält für mich zu arbeiten scheint ok, hier ist die SQL, die von Linq to Entities generiert wird:

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 

Es scheint eine Behandlung zu arbeiten. Mit CHARINDEX zu trainieren, wenn das Feld verkettet den eingegebenen Text enthält, die der oben genannte Fall ist „Dave“ war.

Dank Dave

+0

Wie seltsam. Ich habe mich selbst verifiziert, dass es nicht funktioniert, und hier ist die MSDN-Dokumentation, die das gleiche sagt: http://msdn.microsoft.com/en-us/library/bb738638.aspx –

2

Der Grund enthält „Werke“ für Sie, weil Sie String.Contains sind rufen, und nicht IEnumerable.Contains, wie Craig dachte.