如何从 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: 编译器将为您生成一个匿名类型,其中定义了Name
和Count
。如果你想确切地知道,你可以使用反射来检查生成类型的细节。
@Sergio IQueryable 在您的问题中。 IQueryable例如:
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 查询中提取结果?的主要内容,如果未能解决你的问题,请参考以下文章