Linq删除覆盖连接
我有一个问题表,它连接到一个解决方案表。答案链接到问题,但为了删除问题,我必须先删除该问题的答案,然后删除问题本身 我有一个linq查询,它检索特定问题的所有解决方案,但是我不确定如何继续删除解决方案,然后继续删除问题 以下是代码,它接收过载错误消息:Linq删除覆盖连接,linq,join,linq-to-sql,Linq,Join,Linq To Sql,我有一个问题表,它连接到一个解决方案表。答案链接到问题,但为了删除问题,我必须先删除该问题的答案,然后删除问题本身 我有一个linq查询,它检索特定问题的所有解决方案,但是我不确定如何继续删除解决方案,然后继续删除问题 以下是代码,它接收过载错误消息: public static void DeleteSol(string qTextInput) { ExamineDataContext dc = new ExamineDataContext(); var matchedSol
public static void DeleteSol(string qTextInput)
{
ExamineDataContext dc = new ExamineDataContext();
var matchedSol = from q in dc.Questions
where q.QuestionText.Contains(qTextInput)
join s in dc.Solutions
on q.QuestionID equals s.QuestionID
into qs // note grouping
select new
{
solution = qs
};
try
{
dc.Solutions.DeleteOnSubmit(matchedSol);
dc.SubmitChanges();
}
catch (Exception ex)
{
throw ex;
}
}
我认为使用Join是问题的根本原因。尝试在DBML中创建问题和答案之间的映射,然后您将能够简单地编写:
var questions = from q in Questions where q.QuestionText.Contains(qTextInput);
var solutions = questions.SelectMany(q => q.Solutions);
...
dc.Solutions.DeleteAllOnSubmit(solutions);
我认为使用Join是问题的根本原因。尝试在DBML中创建问题和答案之间的映射,然后您将能够简单地编写:
var questions = from q in Questions where q.QuestionText.Contains(qTextInput);
var solutions = questions.SelectMany(q => q.Solutions);
...
dc.Solutions.DeleteAllOnSubmit(solutions);
如果您的问题和解决方案之间存在外键关系,只需将其设置为传播删除(删除时级联)。这样,您只需删除问题,数据库就会自动删除解决方案
使用外键关系还将在问题实体上为您提供一个实体集,该实体集将直接加载相关的解决方案实体并使其生效,这样您就可以避免一直编写连接逻辑。在添加外键关系后,您需要删除并重新添加实体,以便设计器拾取实体,或者您可以手动将其放入设计器。如果您的问题和解决方案之间存在外键关系,只需将其设置为传播删除(删除时级联)。这样,您只需删除问题,数据库就会自动删除解决方案
使用外键关系还将在问题实体上为您提供一个实体集,该实体集将直接加载相关的解决方案实体并使其生效,这样您就可以避免一直编写连接逻辑。在添加外键关系后,您需要删除并重新添加实体,以便设计器拾取它,或者您可以手动将其放入设计器。问题在于
matchedSol
不是IEnumerable
类型。如果您的代码能够编译,我会感到惊讶
您需要的是(示例使用LINQ2对象,但这没有什么区别):
LINQ表达式的结果是具有四种解决方案的可枚举性:
p
、Q
、S
和T
。此可枚举项可以指定给您的DeleteOnSubmit
方法。问题在于matchedSol
不是IEnumerable
类型。如果您的代码能够编译,我会感到惊讶
您需要的是(示例使用LINQ2对象,但这没有什么区别):
LINQ表达式的结果是具有四种解决方案的可枚举性:
p
、Q
、S
和T
。这个可枚举项可以提供给您的DeleteOnSubmit
方法。Hm,好的。我会试着给出一个完整的例子。也许在某个地方会有所不同。嗯,好吧。我会试着给出一个完整的例子。也许在某个地方有所不同。