实体框架中的“var”是什么

时间:2011-10-16 09:29:09

标签: entity-framework entity-framework-4

我想问一下这句话中的“var”是什么。

        var context = new MHC_CoopEntities();

        var lists = (from c in context.InventLists
                     select new
                                {
                                    c.InventID,
                                    c.ItemName,
                                    c.InventCategory.CategoryID,
                                    c.UnitQty,
                                    c.UnitPrice
                                }).ToList();

        ListGridView.DataSource = lists;
        ListGridView.DataBind();

我知道“var”可以是任何值。我正在尝试为此创建一个辅助类。

2 个答案:

答案 0 :(得分:3)

这将是一个新的匿名类型。如果你需要在函数之间传递它,你应该首先声明自定义类型(我称之为InventType):

public class InventType {
  int InventId { set; get; }
  string ItemName { set; get; }
  int CategoryId { set; get; }
  int UnitQty { set; get; }
  decimal UnitPrice { set; get; }
}

var lists = (from c in context.InventLists
             select new InventType
               {
                 InventId = c.InventID,
                 ItemName = c.ItemName,
                 CategoryId = c.InventCategory.CategoryID,
                 UnitQty = c.UnitQty,
                 UnitPrice = c.UnitPrice
               }).ToList();

现在var代表List<InventType>

答案 1 :(得分:3)

var与实体框架无关。它是一个纯C#构造,允许您定义隐式类型对象。它在documentation中有所解释。基本上它允许编译器从赋值的右侧推断出变量的实际类型。这可以避免您重复两次相同的类型声明。对于没有名称的匿名类型也是必要的。例如:

var foo = new { Id = 123, Name = "anon" };

这正是你的例子中发生的事情。在select子句中,您将返回匿名类型。所以唯一的方法是使用var

在第一个例子中:

var context = new MHC_CoopEntities();

相当于:

MHC_CoopEntities context = new MHC_CoopEntities();

因为我们知道类型。