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.

diagrama http: //lh4.ggpht. com / _gjsCWAV_CZc / ShW6hC-eozI / AAAAAAAACbY / mXaBfiZtBY8 / s400 / diagram.png

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;
¿Fue útil?

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
scroll top