具有特定选择列的Linq更新为null

时间:2015-06-22 15:43:53

标签: 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;

这完成了我的工作但是如果任何列为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.

1 个答案:

答案 0 :(得分:0)

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

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

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

如果行是大的,正如你在评论中暗示的那样,我会定义一个新的模型“table”,它只选择列的一个子集,并用它来更新行。

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