Linq to Sql: перезаписать свойства при объединении таблиц - PullRequest
3 голосов
/ 25 августа 2011

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

Пример кода:

То, что я хотел получить, это оригинальный объект с именем и текстом, перезаписанным таблицей Contact_tls, например

  1. это вернет мне список исходных контактов, не переведенных.
  2. это вернет мне список переведенных элементов, как я хочу, но в виде списка анонимных типов.
  3. Возможно, но вы должны переназначить все не связанные с языком свойства, такие как (ID, ApplicationID, PhoneNumber и т. Д.)
  4. Последний подход, должно быть что-то похожее (выбрасывание ошибок)

    защищенный void Page_Load (отправитель объекта, EventArgs e) { Список контактов = новый список (); webDataContext db = new webDataContext ();

    //1
    Contacts = db.Contacts.Join(
        db.Contact_tls.Where(i => i.Culture == "fr"),
        i => i.ID,
        t => t.ID,
        (i, t) => i).ToList();
    
    //2
    var linqObject = db.Contacts.Join(
        db.Contact_tls.Where(i => i.Culture == "fr"),
        i => i.ID,
        t => t.ID,
        (i, t) => new { ID = i.ID, Name = t.Name, Text = t.Text }).ToList();
    
    //3
    Contacts = db.Contacts.Join(
        db.Contact_tls.Where(i => i.Culture == "fr"),
        i => i.ID,
        t => t.ID,
        (i, t) => new Contact { ID = i.ID, Name = t.Name, Text = t.Text }).ToList();
    
    //4  
    var contacts = db.Contacts.Join(
        db.Contact_tls.Where(i => i.Culture == "fr"),
        i => i.ID,
        t => t.ID,
        (i, t) => i { Name = t.Name, Text = t.Text }).ToList();
    

    }

Ответы [ 2 ]

1 голос
/ 25 августа 2011

Я бы создал класс, используя Linq to Objects, чтобы вы могли изменить # 2 следующим образом:

Contacts = db.Contacts.Join(
    db.Contact_tls.Where(i => i.Culture == "fr"),
    i => i.ID,
    t => t.ID,
    (i, t) => new { ID = i.ID, Name = t.Name, Text = t.Text })
    .AsEnumerable()
    .Select(x =>  new Contact { ID = x.ID, Name = x.Name, Text = x.Text })
    .ToList();
1 голос
/ 25 августа 2011

Попробуйте добавить конструктор в класс Contract с параметром для свойства и используйте его с номером 3:

Contacts = db.Contacts.Join(db.Contact_tls.Where(i => i.Culture == "fr"),
                            i => i.ID, t => t.ID,
                            (i, t) => new Contact(i.ID, t.Name, t.Text))
                      .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...