Linq to sql LINQ:选择一个对象,但在不创建新对象的情况下更改某些属性
我试图使用LINQ SQL中另一个对象的值来选择一个对象 我现在有这个,Linq to sql LINQ:选择一个对象,但在不创建新对象的情况下更改某些属性,linq-to-sql,Linq To Sql,我试图使用LINQ SQL中另一个对象的值来选择一个对象 我现在有这个, var result1 = (from s in pdc.ScanLogs from ec in pdc.ExhibitsContacts where s.ExhibitID == ec.ExhibitID select ec.Contact); 我想分配一个值ec.Contact.Note=ec.Comment;
var result1 = (from s in pdc.ScanLogs
from ec in pdc.ExhibitsContacts
where s.ExhibitID == ec.ExhibitID
select ec.Contact);
我想分配一个值ec.Contact.Note=ec.Comment
;
在LINQSQL中有没有一种方法可以在不编写多个查询的情况下做到这一点
我读了这篇博客文章:但它似乎不适用于LINQSQL。问题是LINQtoSQL不知道如何解释扩展方法。除了使用从LINQ到SQL的存储过程(这种存储过程会破坏ponit)之外,唯一的方法是获取对象、更新,然后提交更改 基本上你不能这么做。LINQ是一种查询语言,您要做的是用查询改变现有的实体。这意味着您的查询将产生副作用,而LINQtoSQL不支持这种情况 虽然在将LINQ返回到SQL实体时,这在单个查询中不起作用,但当您返回简单的DTO结构时,这将起作用。例如:
var result1 =
from s in pdc.ScanLogs
from ec in s.ExhibitsContacts
select new ContactDto
{
Id = ec.Contact.Id,
Note = ec.Comment,
SomeOtherFields = ec.Contact.SomeOtherFields
};
作为旁注:还要看看我是如何通过使用ScanLog
实体的ExhibitsContacts
属性(当您的数据库架构定义了正确的外键时,它将由LINQ to SQL为您生成)从查询中删除where s s s s s s s.exhibad==ec.exhibad
连接的
更新:
当您需要从几个方法返回这些DTO时,您可能会考虑将转换从实体集合集中到DTO对象的集合中。我倾向于将此方法放在DTO上(这样很容易找到)。代码可能如下所示:
public class ContactDto
{
// Many public properties here
public static IQueryable<ContactDto> ToDto(
IQueryable<Contact> contacts)
{
return
from contact in contacts
select new ContactDto
{
Id = contact.Id,
Note = contact.ExhibitsContact.Comment,
ManyOtherFields = contact.ManyOtherFields
};
}
}
IQueryable<Contact> contacts =
from s in pdc.ScanLogs
from ec in s.ExhibitsContacts
select ec.Contact;
IQuerable<ContactDto> result1 = ContactDto.ToDto(contacts);
谢谢,这是一个很好的建议。联系人对象有20个字段,有没有一种方法可以在不指定每个字段(或字段更改时)的情况下执行此操作?您可以使用AutoMapper之类的工具将属性从实体自动复制到DTO,但这仅适用于内存中的对象。当您希望LINQtoSQL创建一个高效的SQL查询(并且不加载超过严格要求的数据)时,这是行不通的。可能有帮助的是集中化从实体到DTO的转换。我更新了我的答案来展示一个例子。我希望这能有所帮助。