2012-09-17 75 views
1

首先我很新(noob)。可能我的問題很愚蠢,但我陷入了困境。這是情況。如何爲linq查詢創建一個類(EF)

我開始使用EF 5.0編寫winforms數據庫應用程序。一切都很好,我可以做我想做像這樣的形式:

private void Form1_Load(object sender, EventArgs e) 
{   
    using (var ctx = new pehkEntities()) 
    { 
     var result = from k in ctx.Kolons 
        select new 
        { 
         KolonAdı = k.KolonAdi, 
         En = k.En, 
         Boy = k.Boy, 
         Yükseklik = k.Yukseklik, 
         ID = k.KolonID 
        }; 


     dataGridView1.DataSource = result.ToList(); 
    } 
} 

但我的Form1的代碼是真的搞砸了,現在,我想用類和方法來清潔它。我試圖在program.cs中創建一個類和一個方法,但我失敗了。 我應該如何解決它?

public class veritabani_islemleri 
{ 
    public ???? kolonlistele() 
    { 
    using(pehkEntities ctx = new pehkEntities()) 



     var result =from k in ctx.Kolons 
       select new 
       { 
        KolonAdı = k.KolonAdi, 
        En = k.En, 
        Boy = k.Boy, 
        Yükseklik = k.Yukseklik, 
        ID = k.KolonID 
       }; 

     return ???? 
    } 
} 

我的問題是我不能填充問號。 我只是想以我的形式做到這一點。

private void Form1_Load(object sender, EventArgs e) 
{ 
    dataGridview.DataSource=myfunction(); 
} 

或者如果我的方法是完全錯誤的,我應該怎麼做?

+1

查看此主題:http://stackoverflow.com/questions/1070526/how-to-return-anonymous-type-from-c-sharp-method-that-uses-linq-to-sql – onnovalkering

+0

可能的重複[LINQ to SQL:Return anonymous type?](http://stackoverflow.com/questions/534690/linq-to-sql-return-anonymous-type) – PHeiberg

+0

[訪問C#匿名類型對象](http: //sackoverflow.com/questions/713521/accessing-c-sharp-anonymous-type-objects) – nawfal

回答

2

對於這一點:你按照下面的步驟: -

  1. 創建視圖模型類
  2. 並創建在形式reuired財產
  3. 然後創建一個靜態方法,它將財產
  4. 然後在表單中使用該模型。

例如:

public class veritabani_islemleriModel{ 
public String KolonAdi { get; set; } 
public String En { get; set; } 
public String Boy { get; set; } 
public String Yükseklik { get; set; } 
public String ID { get; set; } 
} 

and then 
public class veritabani_islemleri 
{ 
    public List<veritabani_islemleriModel> kolonlistele() 
    { 
    using(pehkEntities ctx = new pehkEntities()) 



     var result =from k in ctx.Kolons 
       select new veritabani_islemleriModel 
       { 
        KolonAdı = k.KolonAdi, 
        En = k.En, 
        Boy = k.Boy, 
        Yükseklik = k.Yukseklik, 
        ID = k.KolonID 
       }; 

     return result.Tolist(); 
    } 
} 
+0

THX!這解決了我的問題,我學到了很多東西。現在還有一個問題。既然你不知道土耳其語,你把我的變量(En,Boy,Yukseklik)定義爲String。他們是int,我將它們定義爲int。但它沒有奏效。有錯誤消息:「不能將int?轉換爲int」或smt。所以我將它們定義爲「int?」。但爲什麼?在數據庫中他們是整數,但在C#中「int?」有什麼不對? – Hasan

+0

如果你會看到數據庫,那麼它是無效類型,這就是爲什麼在實體框架工作類的屬性類型是int?所以我們必須聲明int?鍵入我們的模型。 – Pushpendra

+0

是的,我做到了,工作。你是對的,他們是可空的。 thx的幫助! – Hasan

1

您當前的LINQ查詢返回的所謂的 「匿名類型」(see here)。在構建時,編譯器實際上是創建一個類來爲您保存具有所有正確屬性的數據。但是,C#不能從函數返回匿名類型,這就是爲什麼你不知道返回什麼類型的原因。

解決這個最好的辦法就是讓自己的真正的類來保存數據,這是什麼Pushpendra確實在他們的答案:

public class veritabani_islemleriModel{ 
public String KolonAdi { get; set; } 
public String En { get; set; } 
public String Boy { get; set; } 
public String Yükseklik { get; set; } 
public String ID { get; set; } 
} 

現在你有了一個真正的類型veritabani_islemleriModel,你可以在使用你的方法簽名和返回語句,而不是編譯器生成的匿名類型。