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
C# 使用linq更新表_C#_Linq - Fatal编程技术网

C# 使用linq更新表

C# 使用linq更新表,c#,linq,C#,Linq,我想更新表,但它不工作 代码如下: public Boolean setSectionTickSign(decimal Trans_ID, decimal Job_ID, string SectioName) { string sectionames = ""; Transcription_Master Trans_Mastr = new Transcription_Master(); try { var Trans_Master = (from

我想更新表,但它不工作

代码如下:

public Boolean setSectionTickSign(decimal Trans_ID, decimal Job_ID, string SectioName)
{
    string sectionames = "";
    Transcription_Master Trans_Mastr = new Transcription_Master();
    try
    {
        var Trans_Master = (from Trans_Mast in r2ge.Transcription_Master where Trans_Mast.Transcription_Id == Trans_ID && Trans_Mast.Entity_Id == Job_ID select new 
        {
            Trans_Mast.Completed_Trans_Sections
        }).Distinct().ToList();
        var complt_trans = Trans_Master.AsEnumerable().Where(dr = > dr.Completed_Trans_Sections != null).ToList();
        if (complt_trans.Count == 0) 
        {
            if (sectionames == "") 
            {
                Trans_Mastr.Completed_Trans_Sections = SectioName;
            }
        } 
        else
        {
            Trans_Mastr.Completed_Trans_Sections = "," + SectioName;
        }
        int sc = r2ge.SaveChanges();
    }
}

它不更新数据库。它有什么问题???

您应该将这段代码更改为这样的内容:

 var Trans_Master = (from Trans_Mast in r2ge.Transcription_Master 
                     where Trans_Mast.Transcription_Id == Trans_ID 
                     && Trans_Mast.Entity_Id == Job_ID 
                     select Trans_Mast).Distinct().ToList();

在这种情况下,变量Trans_Maser将引用集合中的对象,因此将对从EF上下文中获取的对象进行更改,保存更改将给出正确的结果。

解决了我自己的问题
Transcription_Master Trans_Mastr=new Transcription_Master()无需创建新对象

public Boolean setSectionTickSign(decimal Trans_ID, decimal Job_ID, string SectioName)
{
    string sectionames = "";
    try
    {
        var empQuery = r2ge.Transcription_Master.Where(l => l.Transcription_Id == Trans_ID && l.Entity_Id == Job_ID).ToList();

        foreach (Transcription_Master Trans_Mastrr in empQuery)
        {
            if (empQuery.Count == 0)
            {
                if (sectionames == "")
                {
                    Trans_Mastrr.Completed_Trans_Sections = SectioName;
                }
            }
            else
            {
                Trans_Mastrr.Completed_Trans_Sections = Trans_Mastrr.Completed_Trans_Sections + "," + SectioName;
            }
        }
        int sc = r2ge.SaveChanges();
    }

为什么会有这么短的名字?在c语言中,我们没有限制使用短名称,也不会在编译过程中造成任何问题。就个人而言,这真的很难理解,因为我不知道complt\u trans实际上意味着什么。我知道它是完整的还是完整的,甚至是一个汇编?必须深入了解其他代码才能理解变量,这意味着代码不容易维护。您不需要修改r2ge.Transcription\u Master,而是一个新复制的
Trans\u Mastr
,那么如何在表@EricIt中进行更改真的很难阅读。查看命名约定。您是否设置了AutoDetectChanges=false?您还有两个名称相同的变量:Transcription\u Master Trans\u Mastr=new Transcription\u Master();为什么要在这里创建新的转录\u Master()?而不是从EF集合中获取?