Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq删除覆盖连接_Linq_Join_Linq To Sql - Fatal编程技术网

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

我有一个问题表,它连接到一个解决方案表。答案链接到问题,但为了删除问题,我必须先删除该问题的答案,然后删除问题本身

我有一个linq查询,它检索特定问题的所有解决方案,但是我不确定如何继续删除解决方案,然后继续删除问题

以下是代码,它接收过载错误消息:

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,好的。我会试着给出一个完整的例子。也许在某个地方会有所不同。嗯,好吧。我会试着给出一个完整的例子。也许在某个地方有所不同。