2013-05-11 3 views
0

Я создаю сайт на многих языках (en, fr, es), в моей базе данных У меня есть, например, таблицы стран с: id, name_en, name_fr и name_es как столбцы, которые содержат соответственно имя страны на английском, французском и испанском языках.Динамическая колонка в Linq

Я работаю с mvc 3, C# и инфраструктурой Entity.

У меня уже есть функция, которая возвращает текущий язык: GetCurrentLang() и возвращает строки «en», «fr» или «es».

Я хочу заказать по правой колонке и войти в свою правую колонку тоже.

Вот мой код:

using (var db = new InsoutingContext()) 
     { 
      var queryCountries = from qCountries in db.Countries.Where(r => r.Cities.Count > 0) 
           orderby qCountries.Name_fr 
           select qCountries; 
      foreach (var item in queryCountries) 
      { 
       Countries.Add(new ListItem((item.Name_fr), item.Id.ToString())); 
      } 
     } 

ответ

0

Благодаря тому, как вы моделируемой его, вам нужно будет добавить упорядочение к запросу условно, например:

var currentLang = GetCurrentLang(); 
var queryCountries = db.Countries.Where(r => r.Cities.Count > 0); 

if (currentLang == "es") 
{ 
    queryCountries = queryCountries.OrderBy(c => c.Name_Es); 
} 
else if (...) // etc. 

Вы Арен» t делать проекцию, поэтому результатом вашего запроса будет последовательность стран, которая все равно будет содержать все ваши свойства.

Эта модель, очевидно, не очень масштабируемый, поэтому я хотел бы нормализовать вашу страны таблицы и имею внешний ключ, который ссылается на языки или культур стола вместо этого, а затем использовать навигационные свойства ваших сущностей. Тогда вы загружаете страны только для текущего языка, и вы можете просто заказать их по имени.

+0

Thanx, чтобы ответить, Это то, что я не хочу делать, потому что у всех моих таблиц есть что-то вроде этого, я думаю, я должен сделать то же самое в странах .Add (новый ListItem ((item.Name_fr), item .Id.ToString())); и где угодно. Когда вы сказали «Из-за того, как вы его смоделировали», можете ли вы предложить мне, как я должен его смоделировать, например, в этой таблице. Я должен переехать, если я не отвечу :) Znd thanx для ответа снова – user2190624

+0

Да, именно так вам нужно будет изменить вашу модель, как описано. Например. страны - Id, LanguageId, Name. Языки - Id, Code. Это самый простой пример отношения «один ко многим». – devdigital

+0

Возможно, вы захотите ввести таблицу переводов, чтобы одна и та же страна не смоделировалась как разные объекты только для различий в культуре. – devdigital

Смежные вопросы