2017-05-18 70 views
0

我想選擇一個或多個列這樣的事情,但我會錯誤。如何選擇一個或多個列Asp.Net實體框架

List<Uye> allCustomer = new List<Uye>(); 
allCustomer = db.Uye 
    .Select(i => new Uye { Ad = i.Ad }) 
    .ToList(); 

The entity or complex type 'tasarımDesenleriOdev1.Models.RepositoryPatern.Uye' cannot be constructed in a LINQ to Entities query.

這是我Uye表。

[Table("Uye")] 
public partial class Uye : BaseEntity 
{ 
    public Uye() 
    { 
     Order = new HashSet<Order>(); 
    }  

    [StringLength(50)] 
    public string Ad { get; set; } 

    [StringLength(50)] 
    public string Soyad { get; set; } 

    [StringLength(50)] 
    public string Email { get; set; } 

    [StringLength(50)] 
    public string KullaniciAdi { get; set; } 

    [StringLength(500)] 
    public string Foto { get; set; } 

    public int? YetkiId { get; set; } 

    [StringLength(50)] 
    public string Sifre { get; set; } 

    public string Adres { get; set; } 

    public virtual ICollection<Order> Order { get; set; } 

    public virtual Yetki Yetki { get; set; } 
} 
+1

我們將需要您發佈實體Uye的完整定義以幫助完成此項任務。 –

+0

你的代碼是正確的。它不應該導致這樣的錯誤類型 – cosset

+0

我編輯我的帖子。你能檢查嗎? – Serkan

回答

1

您提供的異常信息...

實體或複雜類型 「tasarımDesenleriOdev1.Models.RepositoryPatern.Uye」不能 在LINQ到實體查詢構造。

...似乎反映了這樣一個事實,即當您嘗試構建複雜實體的新實例時,您應該只選擇新的DTO類型而不是實體類型。

嘗試類似...

var allCustomer = db.Uye 
    .Select(i => new { 
     Ad = i.Ad, 
     Soyad = i.Soyad 
    }) 
    .ToList(); 
+0

它仍然給出同樣的錯誤。 – Serkan

+0

我試過var allCustomer = db.Uye.AsEnumerable()。Select(i => new Uye {Ad = i.Ad})。ToList(); 作爲可執行的方法,現在它發出此錯誤 DataSet不支持System.Nullable <>。 – Serkan

+2

不管怎樣,你不想調用'AsEnumerable()',它只會迫使EF立即獲取所有Uye條目,然後選擇將刪除剛剛通過網絡從sql獲取的大部分數據。 –

1

按我的理解,如果你想只選擇你的對象一欄,你可以簡單地使用如下:

List<Uye> allCustomer = db.Uye.Select(i => i.Ad).ToList(); 

注意: 我希望在你的表中Uye,Ad是其中的一個專欄。如果是的話那麼上面的LINQ查詢應該肯定的工作

附加信息:http://www.dotnettricks.com/learn/linq/difference-between-select-and-selectmany-in-linq

請讓我知道你的意見或想法

感謝 KARTHIK

0

的問題是,你不需要手動構建Uye實例,EF在您需要時爲您工作。在這種情況下,它看起來像是要從表Uye的所有Ad列值。下面的代碼爲您的實體關係被正確配置要正確,只要工作:

如果你想初級會員的整個列表對象,因爲你所需要的所有列的值,你可以只是做:

allCustomers = db.Uye.ToList(); 

如果您需要多列,而不是整個對象,你可以添加更多的列匿名選擇這樣的:

allCustomers = db.Uye 
    .Select(uye => new { uye.Ad, uye.Property1, uye.Property2, ...}) 
    .ToList() 
+0

謝謝你!我改變我的查詢,像這樣select(i => new {})now – Serkan

+0

@Serkan這不就是以前的戰爭嗎?你確定你輸入正確嗎? – NetMage

+0

我在想......呃,Mike重複我的答案是「錯誤的」,但現在不知何故是正確的?什麼改變了? – War

-1

try代碼:

allCustomer = db.Uye 
.Select(i => new Uye { Ad = i.Ad ,Soyad =i.Soyad }) 
.ToList(); 
+0

您的答案被標記爲低質量,因爲它太短。請擴展您的答案。也許可以解釋爲什麼這將是一個更好的方法來做到這一點,爲什麼OP試圖做到這一點的方式沒有奏效。 – Ortund