C# Linq更新,特定列的select为null
我想从SQl中选择几列,然后更新该表 我曾经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; 这完成了我的工作,
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=