如何为linq查询创建一个类(EF)

时间:2012-09-17 11:06:24

标签: c# database winforms entity-framework methods

首先,我很新(noob)。可能我的问题非常愚蠢,但我卡住了。情况就是这样。

我开始使用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();  
}

或者,如果我的方法完全错误,我应该怎么做?

2 个答案:

答案 0 :(得分:2)

为此:您按照以下步骤操作: -

  1. 创建ViewModel类
  2. 并创建以表格
  3. 重新加载的属性
  4. 然后创建一个属性为
  5. 的静态方法
  6. 然后在表单中使用该模型。
  7. 例如:

    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();
        }
    }
    

答案 1 :(得分: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,你可以在你的方法签名和return语句中使用它,而不是编译器生成的匿名类型。