verwendetes Datenbanksystem: <MSSQL 2008>
Hi!
Ich hab ein kleines Problem mit dem EF und komm einfach nicht dahinter...
Ich 2 Tabellen in der DB
Entry
Entry_Translation
Im EDM ist durch die FKs alles so gemappt wie es auch sein soll...
So nun möchte ich einen Entry-Datensatz mit der Translation für "de" abfragen.
und es werden aber immer alle Translation - Datensätze für den Entry-Datensatz zurückgegeben...
string Culture = "de";
var result = from c in db.Entries.Include("Entry_Translations")
where c.EntryId == 4711
&& c.Active == true
&& c.Entry_Translations.Any(e => e.Culture == Culture)
select c;
return result.Single();
Das funktioniert aber wie gesagt nicht so wie es soll...
Ich bräuchte 2 Queries:
einen der mir die Entries (1 oder mehrere..je nach where-clause) mit der Übersetzung für die angegebene Culture zurückliefert
und einen der mit den Entry für einen gegebene Url zurückliefert...
Hallo M@tuk
Wenn ich Dich richtig verstehe sollte folgendes funktionieren :
string Culture = "de";
var result = from c in db.Entries.Include("Entry_Translations")
where c.EntryId == 4711
&& c.Active == true
&& c.Entry_Translations.Culture == Culture
select new { EntryId = c.EntryID, Culture = c.Entry_Translations.Culture, Translation = c.Entry_Translations.Title, URL = c.Entry_Translations.Url };
return result;
Wenn nicht, was genau ist die Ausgabe von diesem LINQ Statement und was genau brauchst du ?
Edit :
-> Wäre es nicht ev. "besser" die Übersetzungen als RESX zu hinterlegen ?
---> KEIN DB Zugriff
---> Easy Handling
---> etc. etc. etc.
Beste Grüsse
Diräkt
Hi,
nein das funktioniert so leider nicht...
Entry_Translations ist ja eine Collection...
und das mit den Übersetzungen als resx geht auch nicht, da
es sich ja auch um ein ganz anderes thema handeln könnte.
Beispiel mal auf ein Messageboard übertragen...
Entry ==> Board
Entry_Translation ==> Threads
Jetzt hab ich eine Navigation-Property Threads
über load() oder include bekomme ich die Datensätze jeweils in
mein Board-Objekt.
Nun möchte ich aber nicht alle Threads in einem Board "ausgeben lassen" sondern
nur die Threads die nicht gelöscht wurden.
[pseudo-code]
gib mir das Message-Board mit der Id 13 und inkludiere alle Threads die nicht gelöscht wurden.... bitte 🙁 ...
[/pseudo-code]
Um das also über die Navigation-Property zu lösen müsste es möglich sein das "include" oder "load" zu filtern aber nur wie und wenn das so gar nicht möglich ist, wie macht man das sonst?
Hallo M@tuk
Entry -> Entry_Translation (1:N)
gib mir das Message-Board mit der Id 13 und inkludiere alle Threads die nicht gelöscht wurden.... bitte unglücklich ...
var query = (rom c in db.Entries
where c.EntryId == 4 && c.Active==true
select c.EntryID).FirstOrDefault();
var result = query.Entry_Translations.Where(t=>t.Entry_Translations.EntryID);
Sollte funktionieren ?!
(Die Entry_Translation führen dann wohl auch die Board ID ... ?!)
Beste Grüsse
Diräkt
ah ok...
also in einem Query geht das dann wohl nicht ... hmmm. 🤔
mit mehreren Queries wird das jetzt etwas mühsam...
ich dachte dass das mit ein query geht und dann sowas gehen würde...
<% foreach(Entry e in repository.GetEntries()) { %>
<%: e.Entry_Translation.First().MenuTitle %>
<% } %>
oder
<% foreach(Board b in repository.GetBoardsWithActiveThrea()) { %>
<%: b.Threads.Count() %>
<% foreach(Thread th in b.Threads) { %>
//gib mir jeden thread aus...
<% } %>
<% } %>
Hallo M@tuk
Doch das ist möglich, hatte gestern nur den Kopf voller Bier 😉
var query = (from c in db.Entries
where c.EntryId == 4 && c.Active==true
select new{ID=c.EntryId, Translations=c.Entry_Translations.Where(t=>t.Entry.EntryId==c.EntryId)};
Hoffe das hilft Dir !
Beste Grüsse
Diräkt