Query LINQ to SQL Localizzazione
-
23-08-2019 - |
Domanda
Date le seguenti tabelle che vorrei restituire il testo localizzato per la data cultura o il testo per la cultura predefinita in cui non esistono fila per la cultura data.
Quindi, con i dati Folowing
Risorse
ID Name
1 Donkey
2 Elephant
LocaleStrings
ID CultureID ResID LocaleText
1 1 1 Donkey
2 1 2 Elephant
3 2 1 baudet
Mi piacerebbe essere in grado di restituire il seguente per la cultura francese
baudet
elephant
Ho provato varie query basata soprattutto SINISTRA SI UNISCE campioni che ho visto, ma mi sono bloccato.
var ct = from r in db.Resources
join lt in db.LocaleStrings
on r.ID equals lt.ResID into res
from x in res.DefaultIfEmpty()
select new
{
CultureID = x.CultureID,
LocaleText = x.LocaleText,
ResID = x.ResID
};
var text =
from c in db.Cultures
join t in ct
on c.ID equals t.CultureID into cults
from x in cults.DefaultIfEmpty()
select x;
Soluzione
Sono sicuro che c'è un modo migliore, ma questo sembra funzionare:
var ct =
from c in db.Cultures
from l in db.LocaleStrings
from r in db.Resources
where r.ID == l.ResID
select new
{
CultureID = c.ID,
LocaleText = l.CultureID == c.ID ? l.LocaleText : r.Name,
ResID = r.ID,
LSID = l.CultureID == c.ID ? l.ID : 0
};
var text =
from t in ct
where t.LSID != 0 || (t.LSID == 0 && !((from ac2 in ct
where ac2.LSID > 0 && ac2.CultureID == t.CultureID
select ac2.ResID).Contains(t.ResID)))
select new
{
CultureID = t.CultureID,
LocaleText = t.LocaleText,
ResID = t.ResID
};
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow