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

C# 如何从Linq查询中提取结果?,c#,linq,var,C#,Linq,Var,如何从结果集中提取值,以便使用它们 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.I

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

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();
    }
}
这只会在LINQ查询所在的同一方法中起作用,因为编译器只会知道在LINQ
select
中使用的匿名对象类型(
new{}
)中有哪些属性可用

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

foreach (var item in result)
{
    var name = item.Name;
    var count = item.Count;
    ...
}
例如:

class NameCountType
{
    public string Name { get; set; }
    public int Count { get; set; }
}

...

return from ... in ...
       ...
       select new NameCountType
              {
                  Name = ...,
                  Count = ...,
              };
var results=(来自ds.Tables[0]中的myRow)。AsEnumerable()
其中myRow.Field(“用户名”)=“XXX”
选择myRow).Distinct();
foreach(数据行灾难恢复结果)
UserList+=”,“+dr[0].ToString();

计时器结束时,我将接受此答案。我是个好奇的人;结果究竟是什么数据类型?我觉得我太依赖魔法了。@Sergio:编译器将为您生成一个定义了
Name
Count
的匿名类型。如果您想确切知道,可以使用反射来检查生成类型的详细信息。@Sergio IQueryable在您的问题中。在这个答案的最后一个例子中,IQueryable。
foreach (var x in result)
{
   Console.WriteLine(x.c.Name);
}
 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();