Linq to sql LINQ:选择一个对象,但在不创建新对象的情况下更改某些属性

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;

我试图使用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
; 在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的转换。我更新了我的答案来展示一个例子。我希望这能有所帮助。