Linq to Sql:在连接表时覆盖属性
本文关键字:覆盖 属性 连接 to Sql Linq | 更新日期: 2023-09-27 18:06:34
我试图根据区域性用另一个表的值覆盖对象。我想保留原来的对象类型。我已经尝试了不同的方法,但总是以不支持的异常或转换错误结束。
示例代码:
我想检索的是具有"Name"和被Contact_tls表覆盖的"Text"的原始对象,如
- 这将返回给我一个原始联系人列表,没有翻译。
- 这将返回一个我想要的翻译项目列表,但作为一个匿名类型列表。
- 可能,但你必须重新分配所有非语言相关的属性,如(ID, ApplicationID, PhoneNumber等)
-
最后一次,应该是类似的(抛出错误)
保护无效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 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();