LINQ to SQL Localización
-
23-08-2019 - |
Pregunta
Dadas las siguientes tablas que me gustaría devolver el texto traducido para determinada cultura o el texto para la cultura por defecto, donde hay una fila existe para la cultura dada.
Así que con los datos Folowing
Recursos
ID Name
1 Donkey
2 Elephant
LocaleStrings
ID CultureID ResID LocaleText
1 1 1 Donkey
2 1 2 Elephant
3 2 1 baudet
Me gustaría ser capaz de devolver el siguiente para la cultura francesa
baudet
elephant
He intentado varias consultas, extraído IZQUIERDA SE UNE muestras que he visto, pero estoy atascado.
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;
Solución
Estoy seguro de que hay una manera mejor, pero esto parece que funciona:
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
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow