如何将LINQ查询结果转换为列表?

28

我需要将linq查询结果转换为列表。我尝试了以下代码:

var qry = from a in obj.tbCourses
                     select a;

List<course> lst = new List<course>();
lst = qry.ToList();

以下是针对上述代码出现的错误:
Cannot implicitly convert type 
System.Collections.Generic.List<Datalogiclayer.tbcourse> to
System.Collections.Generic.List<course>

它为什么没有帮助?你期望发生了什么事情却没有发生? - BrokenGlass
顺便说一句,你的代码可以更短... var lst = obj.tbCourses.ToList(); - Thomas Levesque
可能是Syntax for linq query to List<string>的重复问题。 - nawfal
5个回答

32

不需要做那么多工作。

var query = from c in obj.tbCourses
        where ...
        select c;

然后您可以使用:

List<course> list_course= query.ToList<course>();

对我来说很好用。


2021年,这现在可以简化为List<course> listCourse = query.ToList(); - Alvaro Rodriguez Scelza

31
List<course> = (from c in obj.tbCourses
                 select 
                new course(c)).toList();

您可以直接在调用时将实体对象转换为列表。有方法可以将其转换为不同的数据结构(列表、数组、字典、查找或字符串)。


在我看来,这是最好的答案。它不仅仅是一个单一的命令,而且还说明了 from ... select ... linq 语法仍然保持其与标准形式 (tbCourses.Select()) 等价的含义。 - miroxlav

8
你需要将每个对象转换为的实例。例如,可以有一个接受的构造函数。你可以像这样编写查询:
var qry = from c in obj.tbCourses
          select new course(c);

List<course> lst = qry.ToList();

这很有创意!但是,它确实有一个缺点,即您的模型项目现在将依赖于您的数据存储库。虽然在较小的项目中这可能没问题,但根据您的架构和关注点分离情况,这可能会成为一个问题。 - msigman

7

您需要使用 select new LINQ 关键字将您的 tbcourse 实体显式转换为自定义类型 course。下面是 select new 的示例:

var q = from o in db.Orders
        where o.Products.ProductName.StartsWith("Asset") && 
              o.PaymentApproved == true
        select new { name   = o.Contacts.FirstName + " " +
                              o.Contacts.LastName, 
                     product = o.Products.ProductName, 
                     version = o.Products.Version + 
                              (o.Products.SubVersion * 0.1)
                   };

http://www.hookedonlinq.com/LINQtoSQL5MinuteOverview.ashx


4
你可以将所有内容选择到新的课程实例中,然后将它们转换为List。
var qry = from a in obj.tbCourses
                     select new Course() {
                         Course.Property = a.Property
                         ...
                     };

qry.toList<Course>();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接