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更新,特定列的select为null_C#_Linq - Fatal编程技术网

C# Linq更新,特定列的select为null

C# Linq更新,特定列的select为null,c#,linq,C#,Linq,我想从SQl中选择几列,然后更新该表 我曾经 var xyz_repl= from mfrepl in xyz_repl_alias where (mfrepl.RPT_ID == sched_data.NOTIF_RPT_ID) && (mfrepl.NOTIF_ID == "" || mfrepl.NOTIF_ID == null) select mfrepl; 这完成了我的工作,

我想从SQl中选择几列,然后更新该表

我曾经

 var xyz_repl= from mfrepl in xyz_repl_alias
               where (mfrepl.RPT_ID == sched_data.NOTIF_RPT_ID) 
               && (mfrepl.NOTIF_ID == "" || mfrepl.NOTIF_ID == null)
               select mfrepl;
这完成了我的工作,但如果任何列为空,则不起作用。然后我尝试只选择特定列,但现在它们变成只读,并且我无法更新表

我这样做:

var xyz_repl= from mfrepl in xyz_repl_alias
              where (mfrepl.RPT_ID == sched_data.NOTIF_RPT_ID) 
              && (mfrepl.NOTIF_ID == "" || mfrepl.NOTIF_ID == null)
              select new 
                    {
                     mfrepl.NOTIF_ID,
                     mfrepl.REPL_DTM,
                     mfrepl.REPL_TYPE,
                     mfrepl.RPT_ID,
                     mfrepl.RPT_VERS 
                    } ;
注意-它现在显示为匿名类型。我需要做什么?任何查询

更新 我又增加了一个类,即:

public class MyPoco
    {
        public string NOTIF_ID { get; set; }
        public DateTime REPL_DTM { get; set; }
        public string REPL_TYPE { get; set; }
        public string  RPT_ID { get; set; }
        public string RPT_VERS { get; set; }

    }
并将我的代码更改为

var xyz_repl = from mfrepl in xyz_repl_alias 
where (mfrepl.RPT_ID == sched_data.NOTIF_RPT_ID) && (mfrepl.NOTIF_ID == "" || mfrepl.NOTIF_ID == null)
select new MyPoco {
NOTIF_ID=mfrepl.NOTIF_ID,
 REPL_DTM=mfrepl.REPL_DTM,
 REPL_TYPE=mfrepl.REPL_TYPE,
 RPT_ID=mfrepl.RPT_ID, 
RPT_VERS=mfrepl.RPT_VERS };
但是现在

   db.SubmitChanges(); is not working.It won`t update databse now.Any suggestion.

您遇到的问题是,您的模型与数据库不同,如果您可以直接选择行(您说的是
Linq2SQL
,而不是
Linq2Entities
),那么您可以再次更新它,您可以这样做

如果选择匿名类型,则会丢失上下文连接,并且无法使用
SubmitChanges()
,因为上下文不会跟踪它

大多数实际实现的问题之一是数据库必须匹配模型才能正常工作,对遗留数据库使用
Linq2SQL
Linq2Entities
通常会让您遇到这样的麻烦

如果行太大,正如您在注释中所暗示的,我将定义一个新的模型“表”,它只选择列的子集,并使用该子集更新行


(我使用术语
Linq2Entities
中的
实体
不同,因为我不知道
Linq2SQL
中的正确术语)

如果可以直接选择行,您的问题是您的模型与您的数据库不同(您说的是
Linq2SQL
而不是
Linq2SQL
),然后您可以再次更新它,您可以这样做

如果选择匿名类型,则会丢失上下文连接,并且无法使用
SubmitChanges()
,因为上下文不会跟踪它

大多数实际实现的问题之一是数据库必须匹配模型才能正常工作,对遗留数据库使用
Linq2SQL
Linq2Entities
通常会让您遇到这样的麻烦

如果行太大,正如您在注释中所暗示的,我将定义一个新的模型“表”,它只选择列的子集,并使用该子集更新行



(我使用术语
Linq2Entities
中的
实体
不同,因为我不知道
Linq2SQL
中的正确术语)

如果您的数据库列可以为空,则相应的类类型也应该可以为空。这将防止出现此问题,因此您不必选择匿名类型。@mattytommo我添加了CanBeNull=true,但没有任何用处。我不想获取所有列,因为许多列在以后的程序中都是无用的,并且包含大量数据。我不知道如果这对您有帮助:在
new
内部,您可以控制可为空的字段并为它们提供默认值。对于
new
内部的一个字段,例如:
REPL\u DTM=mfrepl.REPL\u DTM==null?false:mfrepl.REPL\u TYPE;
Linq到什么?您使用的是什么?@Aron Linq到SQl sir如果您的数据库列可为空,则您的对应项为空onding类类型也应该可以为Null。这将防止出现此问题,因此您不必选择匿名类型。@mattytommo我添加了CanBeNull=true,但没有任何用处。我不想获取所有列,因为许多列在以后的程序中都是无用的,并且包含大量数据。我不知道这是否有助于您:在
new
中,您可以控制可为空的字段并给它们一个默认值。对于
new
中的一个字段,例如:
REPL\u DTM=mfrepl.REPL\u DTM==null?false:mfrepl.REPL\u TYPE;
Linq到什么?你在使用什么?@Aron Linq到SQl Sir谢谢你的回答,先生。但是我映射了它们。我的SQl模式看起来像REPL\u GUID varchar,REPL\u TYPE varchar,RPT_ID varchar、RPT_VERS varchar、RPT_BYTES bigint、REPL_DTM datetime、NOTIF_ID varchar和我在模型类中所做的相同。现在,为了解决我的问题,我已经从模型中删除了列,但这只是一个解决方法(不是很好的方法)。如我所述,在模型中使用两个表,一个用于数据库中的整个表,另一个用于选择此特定场景所需的列。好的。我更改了,新代码如下:var Mainframe_replication_value=from mfrepl in Mainframe_replication_alias,其中(mfrepl.RPT_ID==sched_data.NOTIF_ID)&(mfrepl.NOTIF_ID==“”| mfrepl.NOTIF_ID==null)选择新的MyPoco{NOTIF_ID=mfrepl.NOTIF_ID,REPL_DTM=mfrepl.REPL DTM,REPL_TYPE=mfrepl.REPL_TYPE,RPT_ID=mfrepl.RPT_ID,RPT_=mfrepl.RPT}但是现在我无法更新table.db.submitchange()不影响this@v2v2评论很难跟上,你能更新你的问题吗?@flinderberg更新了我的问题,先生。谢谢你的回答,先生。但是我映射了它们。我的Sql模式看起来像REPL_GUID varchar、REPL_TYPE varchar、RPT_ID varchar、RPT_VERS varchar、RPT_BYTES bigint、REPL_DTM datetime、NOTIF_ID varchar等等现在,为了解决我的问题,我从模型中删除了列,但这只是一个解决方法(不是很好的方法)。如我所述,在模型中使用两个表,一个用于数据库中的整个表,另一个用于选择此特定场景所需的列。好的。我更改了,新代码如下:var Mainframe_replication_value=from mfrepl in Mainframe_replication_alias,其中(mfrepl.RPT_ID==sched_data.NOTIF_ID)和&(mfrepl.NOTIF_ID==“”| | mfrepl.NOTIF_ID==null)选择新的MyPoco{NOTIF_ID=mfrepl.NOTIF_ID,REPL_DTM=mfrepl.REPL_DTM,REPL_TYPE=mfrepl.REPL_TYPE,RPT_ID=