具有LINQ查询的实体框架

时间:2018-06-21 19:23:57

标签: c# entity-framework linq lambda

更改/更改2有什么区别?

using (var context = new NORTHWNDEntities())
{
    var change = context.Regions.Where(r => r.RegionDescription == "East").ToList();

    var change2 = (from r in context.Regions where r.RegionDescription == "East" select new {r.RegionID, r.RegionDescription }).ToList();

    foreach (var p in change2)
    {
        p.RegionDescription = "West";
    }
    context.SaveChanges();
}

当我尝试在foreach循环中对change2进行更新时,出现错误:

  

属性或索引器'......'不能分配给它-只读的

它适用于带有lambda的早期版本。我该如何更改它才能工作?

2 个答案:

答案 0 :(得分:2)

 var change2 = (from r in context.Regions 
                where r.RegionDescription == "East" 
                select new {r.RegionID, r.RegionDescription }).ToList();

您正在返回匿名类型。匿名类型属性是只读的。如果要更改该值,则需要返回已定义的实际类型。

您可以new之类的new Region之类的东西,也可以只返回r

var change2 = (from r in context.Regions 
                where r.RegionDescription == "East" 
                select r).ToList(); 


 var change2 = (from r in context.Regions 
                where r.RegionDescription == "East" 
                select new Region {.RegionID = r.RegionID, 
                                   .RegionDescription = r.RegionDescription }).ToList();

答案 1 :(得分:1)

change2返回一个不可变的匿名类型。 要修改该值,您需要编写:

`Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at gamePanel$XOButton.getValue(gamePanel.java:34)
at gamePanel$XOButton.checkWinner(gamePanel.java:61)
at gamePanel$XOButton.actionPerformed(gamePanel.java:51)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:270)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6589)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
at java.desktop/java.awt.Component.processEvent(Component.java:6354)
at java.desktop/java.awt.Container.processEvent(Container.java:2260)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4966)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2318)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4798)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4906)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4535)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4476)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2304)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4798)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
at java.desktop/java.awt.EventQueue.access$600(EventQueue.java:97)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

相当于change1。