2010-07-23 35 views
0
NorthwindDataContext db = new NorthwindDataContext(); 
List<Category> lresult = (db.Categories 
     .Select(p => new { p.CategoryID, p.CategoryName, p.Description })).ToList(); 

在上面的查询我不想使用VAR,而不是VAR我想使用列表<>但告诉我错误。为什么错误发生,如何解决这个查询。LINQ的名单<>问题

+0

有什么特别的原因,你不想使用'var'?这是一个完美的用例。 – 2010-07-23 19:06:16

回答

1

您正在创建一个匿名类型的对象列表。无法静态声明接受匿名对象的列表(List<object>除外)。

,唯一的解决办法是在你的SELECT语句指定一个具体的类型:

List<MyType> lresult = db.Categories 
         .Select(p => new MyType() { /* assignments here */ }) 
         .ToList(); 

我很想知道你为什么不想使用var虽然。这实际上是它的完美用例。

2

您的查询选择的是匿名类型,而不是Category的实例。这就是为什么你会需要:

  1. 使用VAR代替List<>
  2. 创建一个名为类型,而不是在你的查询中使用匿名类型。

匿名类型是难以形容 - 没有可以在代码中引用它们的类型名称。它们的存在使得更容易在LINQ查询中创建投影,而无需为每个结果编写显式类型。

就你而言,使用var并没有真正的缺点。这就是它存在的原因。它允许你引用匿名类型而不必给他们一个名字(因为你不能)。我只是使用:

var lresult = (db.Categories.Select(... // your query... 
+0

你打我:)。 – 2010-07-23 19:09:53

+0

我正在学习LINQ并遇到问题。我创建了一个针对northwind db的简单查询,并且正在修整应该返回的字段。问题是,与Aspxgridview绑定结果后,我无法编辑show语句,我无法修改 使用anonymoustype更新LINQ结果时出现问题...只读 – shamim 2010-07-24 05:04:19

0

我敢肯定,原因是因为你选择了一个匿名类型。您将不得不选择类别本身或创建另一个将保存数据的类。

选项1:

NorthwindDataContext db = new NorthwindDataContext(); 
List<Category> result = (from cat in db.Categories 
         select cat).ToList(); 

选项2:

public class NewCat 
{ 
    public int CategoryId, 
    public string CategoryName, 
    public string Description 
} 

NorthwindDataContext db = new NorthwindDataContext(); 
List<NewCat> result = (from cat in db.Categories 
         select new NewCat() 
         { 
          CategoryId = cat.CategoryID, 
          CategoryName = cat.CategoryName, 
          Description = cat.Description 
         }).ToList(); 
0

为了得到它与一个List<Category>你需要明确告诉它选择一个类别项工作。

像这样

List<Category> lresult = (from p in db.Categories select new Category { 
           CategoryID = p.CategoryId, 
           CategoryName = p.CategoryName, 
           Description = p.Description }).ToList();