如何从 Linq 查询中提取结果?

Posted

技术标签:

【中文标题】如何从 Linq 查询中提取结果?【英文标题】:How to extract results from a Linq query? 【发布时间】:2011-04-05 19:17:23 【问题描述】:
class Program

    static void Main(string[] args)
    
        MyDatabaseEntities entities = new MyDatabaseEntities();

        var result = from c in entities.Categories
                        join p in entities.Products on c.ID equals p.IDCategory
                        group p by c.Name into g
                        select new
                        
                            Name = g.Key,
                            Count = g.Count()
                        ;

        Console.WriteLine(result.ToString());
        Console.ReadLine();
    

如何从结果集中提取值以便使用它们?

【问题讨论】:

【参考方案1】:
foreach (var item in result)

    var name = item.Name;
    var count = item.Count;
    ...

这仅在 LINQ 查询所在的同一方法内有效,因为编译器只会知道在您的 LINQ select 中使用的匿名对象类型 (new ) 中哪些属性可用。

如果您将 LINQ 查询返回给调用方法,并且希望以上述方式访问它,则必须定义一个显式类型并在您的 LINQ 查询中使用它:

class NameCountType

    public string Name  get; set; 
    public int Count  get; set; 


...

return from ... in ...
       ...
       select new NameCountType
              
                  Name = ...,
                  Count = ...,
              ;

【讨论】:

计时器结束时我会接受这个答案。不过我是个好奇的人;结果到底是什么数据类型?我觉得我太依赖魔法了。 @Sergio: 编译器将为您生成一个匿名类型,其中定义了NameCount。如果你想确切地知道,你可以使用反射来检查生成类型的细节。 @Sergio IQueryable 在您的问题中。 IQueryable 在这个答案的最后一个例子中。【参考方案2】:

例如:

foreach (var x in result)

   Console.WriteLine(x.c.Name);

【讨论】:

【参考方案3】:
 var results = (from myRow in ds.Tables[0].AsEnumerable()
                  where myRow.Field<String>("UserName") == "XXX"
                  select myRow).Distinct();
 foreach (DataRow dr in results)
    UserList += " , "+dr[0].ToString();

【讨论】:

以上是关于如何从 Linq 查询中提取结果?的主要内容,如果未能解决你的问题,请参考以下文章

未使用 MVC 从 Json Result 获取 Ajax 成功方法中的 LINQ 连接查询结果,但结果显示正确

如何将行号投影到 Linq 查询结果中

从 LINQ 查询的一部分中获取值并将其添加到结果中

LINQ/LinqPad:相同的查询不同的结果

循环 LINQ 查询并将结果附加到 DataTable

如何在 Web 服务 asp.net 中返回 linq to sql 查询结果?