Question

Compte tenu des tables suivantes, je voudrais retourner le texte localisé pour la culture donnée ou le texte pour la culture par défaut où il n'y a pas de ligne pour la culture donnée.

diagramme http://lh4.ggpht.com/_gjscwav_czc/shw6hc-eozi/aaaaaaacby/mxabfiztby8/s400/diagram.png

Donc avec les données foliaires

Ressources

ID  Name
1   Donkey
2   Elephant

Localstrings

ID  CultureID  ResID   LocaleText
1   1         1       Donkey
2   1         2       Elephant
3   2         1       baudet

J'aimerais pouvoir retourner ce qui suit pour la culture française

baudet
elephant

J'ai essayé diverses requêtes basées sur les échantillons de gauche à gauche que j'ai vus mais je suis coincé.

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;
Était-ce utile?

La solution

Je suis sûr qu'il y a une meilleure façon, mais cela semble fonctionner:

    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
        };
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top