Linq to sql 在Linq中更新映射表
我有一个带有Linq to sql 在Linq中更新映射表,linq-to-sql,Linq To Sql,我有一个带有CustomerId字段的Customers表,还有一个带有PublicationId字段的Publications表。最后,我有一个映射表CustomersPublications,它记录了客户可以访问的出版物-它有两个字段:CustomerId字段PublicationId 对于给定的客户,我想根据出版物ID列表更新CustomersPublications表。我想删除CustomersPublications中PublicationId不在列表中的记录,并添加Publicati
CustomerId
字段的Customers
表,还有一个带有PublicationId
字段的Publications
表。最后,我有一个映射表CustomersPublications
,它记录了客户可以访问的出版物-它有两个字段:CustomerId
字段PublicationId
对于给定的客户,我想根据出版物ID列表更新CustomersPublications
表。我想删除CustomersPublications
中PublicationId
不在列表中的记录,并添加PublicationId
在列表中但不在表中的新记录
这在SQL中很容易,但我不知道如何在Linq中实现
对于删除部分,我尝试了:
var recordsToDelete = dataContext.CustomersPublications.Where
(
cp => (cp.CustomerId == customerId)
&& ! publicationIds.Contains(cp.PublicationId)
);
dataContext.CustomersPublications.DeleteAllOnSubmit(recordsToDelete);
。。。但那没用。我有一个错误:
System.NotSupportedException:方法“Boolean Contains(Int32)”不支持转换为SQL
因此,我尝试使用Any()
,如下所示:
var recordsToDelete = dataContext.CustomersPublications.Where
(
cp => (cp.CustomerId == customerId)
&& ! publicationIds.Any(p => p == cp.PublicationId)
);
。。。这给了我另一个错误:
System.NotSupportedException:在查询运算符的LINQ到SQL实现中不能使用本地序列,但Contains()运算符除外
有什么指示吗?
[我不得不说,除了最简单的查询外,我觉得Linq让人困惑(而且令人沮丧)。更好的错误消息会有所帮助!]哇。几乎是偶然的,我发现在我的第一个示例中不能使用
Contains
的原因是我的publicationIds
是IList
而不是int[]
。我改变了它,它成功了
谢谢,编译器消息作者!:-| 哇。几乎是偶然的,我发现在我的第一个示例中不能使用
Contains
的原因是我的publicationIds
是IList
而不是int[]
。我改变了它,它成功了
谢谢,编译器消息作者!:-| LINQtoSQL对于查询数据库来说是非常棒的,但是对于更新来说并不是很好,因为它必须选择所有要修改的行,然后逐个更新每个对象。如果您可以使用ExecuteQuery在纯SQL中执行此操作,它将运行得更快。LINQ to SQL对于查询数据库来说非常棒,但对于更新来说并不太好,因为它必须选择要修改的所有行,然后逐个更新每个对象。如果您可以使用ExecuteQuery在纯SQL中执行,它将运行得更快。