【问题标题】:How to extract results from a Linq query?如何从 Linq 查询中提取结果?
【发布时间】: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();
    }
}

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

【问题讨论】:

    标签: c# linq var


    【解决方案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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多