我想从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;
这完成了我的工作但是如果任何列为NULL则它不起作用。然后我尝试仅选择特定列,但现在它们变为只读,我无法更新表。< / p>
我这样做了:
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.
答案 0 :(得分:0)
你遇到的问题是你的模型与你的数据库不一样,如果你可以直接选择行(你说Linq2SQL
而不是Linq2Entities
)那么你可以再次更新它,你做。
如果选择匿名类型,则会丢失上下文连接,并且无法使用SubmitChanges()
,因为上下文不会跟踪它。
大多数现实世界实现的问题之一是数据库必须与模型匹配才能使其正常工作,对遗留数据库使用Linq2SQL
和Linq2Entities
通常会让您遇到这样的麻烦
如果行是大的,正如你在评论中暗示的那样,我会定义一个新的模型“table”,它只选择列的一个子集,并用它来更新行。
(我使用的术语row
与entity
中的Linq2Entities
不同,因为我不知道Linq2SQL
中的正确术语