[英]Fetching only required columns from table using LINQ to modify and save record gives a typical error
所以我嘗試的只是從表中獲取那些必須更新的列,我嘗試如下:
var user = (from u in context.tbl_user where u.e_Id == model.Id select
new { u.first_name, u.last_name, u.role, u.email, u.account_locked })
.FirstOrDefault();
但是,當我嘗試為獲取的數據分配新值時,如下所示
user.first_name = model.FirstName;
我看到下面的錯誤顯示
屬性或索引器'匿名類型:string first_name,string last_name,string role,string email,bool account_locked.first_name'無法分配 - 它是只讀的
但是,當我從表中檢索所有值而沒有過濾如下時,它工作得很好。
var user = (from u in context.tbl_user where u.e_Id == model.Id select u).FirstOrDefault();
為什么它不適用於第一次查詢。 我在很多網站上都讀過,在性能和安全性方面只能從數據庫中檢索所需的屬性。 但我真的無法理解我選擇的第一種方法有什么問題。 任何解釋都非常感謝。
更新
是否還有其他方法可以獲取所需的列並更新它們並將其存儲回來?
正如其他人所說匿名類型是只讀的,為了達到你想要的目的,你必須為它創建一個具有所需屬性的類型:
public class User
{
public string FirstName {get;set;}
public string LastName {get;set;}
.....................
.....................
}
然后,你必須在你的linq查詢中使用它:
var user = (from u in context.tbl_user
where u.e_Id == model.Id
select new User
{
FirstName = u.first_name,
LastName = u.last_name,
......................,
.....................
}).FirstOrDefault();
匿名類型是設計的只讀類型。
為了檢索您可以編輯的內容,您必須創建一個類並在該類中選擇您的實體,如下所示: 如何使用LINQ選擇對象?
或者在這里:
var user = (from u in context.tbl_user where u.e_Id == model.Id select
new User_Mini { u.first_name, u.last_name, u.role, u.email, u.account_locked })
.FirstOrDefault();
注意:編輯此新對象時,您將無法調用context.SubmitChnages()。 你可以這樣做: LINQ to SQL:如何在不檢索整個實體的情況下更新唯一的字段
這將允許您僅更新對象的某些部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.