Linq to Sql:在连接表时覆盖属性

本文关键字:覆盖 属性 连接 to Sql Linq | 更新日期: 2023-09-27 18:06:34

我试图根据区域性用另一个表的值覆盖对象。我想保留原来的对象类型。我已经尝试了不同的方法,但总是以不支持的异常或转换错误结束。

示例代码:

我想检索的是具有"Name"和被Contact_tls表覆盖的"Text"的原始对象,如

  1. 这将返回给我一个原始联系人列表,没有翻译。
  2. 这将返回一个我想要的翻译项目列表,但作为一个匿名类型列表。
  3. 可能,但你必须重新分配所有非语言相关的属性,如(ID, ApplicationID, PhoneNumber等)
  4. 最后一次,应该是类似的(抛出错误)

    保护无效Page_Load(对象发送者,EventArgs e){List Contacts = new List();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();
    

    }

Linq to Sql:在连接表时覆盖属性

我将使用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();

尝试为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();