NorthwindDataContext db = new NorthwindDataContext();
List<Category> lresult = (db.Categories
.Select(p => new { p.CategoryID, p.CategoryName, p.Description })).ToList();
在上面的查询我不想使用VAR,而不是VAR我想使用列表<>但告诉我错误。为什么错误发生,如何解决这个查询。LINQ的名单<>问题
NorthwindDataContext db = new NorthwindDataContext();
List<Category> lresult = (db.Categories
.Select(p => new { p.CategoryID, p.CategoryName, p.Description })).ToList();
在上面的查询我不想使用VAR,而不是VAR我想使用列表<>但告诉我错误。为什么错误发生,如何解决这个查询。LINQ的名单<>问题
您正在创建一个匿名类型的对象列表。无法静态声明接受匿名对象的列表(List<object>
除外)。
,唯一的解决办法是在你的SELECT语句指定一个具体的类型:
List<MyType> lresult = db.Categories
.Select(p => new MyType() { /* assignments here */ })
.ToList();
我很想知道你为什么不想使用var
虽然。这实际上是它的完美用例。
您的查询选择的是匿名类型,而不是Category
的实例。这就是为什么你会需要:
List<>
匿名类型是难以形容 - 没有可以在代码中引用它们的类型名称。它们的存在使得更容易在LINQ查询中创建投影,而无需为每个结果编写显式类型。
就你而言,使用var
并没有真正的缺点。这就是它存在的原因。它允许你引用匿名类型而不必给他们一个名字(因为你不能)。我只是使用:
var lresult = (db.Categories.Select(... // your query...
你打我:)。 – 2010-07-23 19:09:53
我正在学习LINQ并遇到问题。我创建了一个针对northwind db的简单查询,并且正在修整应该返回的字段。问题是,与Aspxgridview绑定结果后,我无法编辑show语句,我无法修改 使用anonymoustype更新LINQ结果时出现问题...只读 – shamim 2010-07-24 05:04:19
我敢肯定,原因是因为你选择了一个匿名类型。您将不得不选择类别本身或创建另一个将保存数据的类。
选项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();
为了得到它与一个List<Category>
你需要明确告诉它选择一个类别项工作。
像这样
List<Category> lresult = (from p in db.Categories select new Category {
CategoryID = p.CategoryId,
CategoryName = p.CategoryName,
Description = p.Description }).ToList();
有什么特别的原因,你不想使用'var'?这是一个完美的用例。 – 2010-07-23 19:06:16