我有一个函数,返回一个linq结果。
private IEnumerable<object> prepareData()
{
var data = from res in Globals.ds.Tables[0].AsEnumerable()
.GroupBy(x => new
{
art = x.Field<string>("artiste"),
alb = x.Field<string>("album"),
})
.Select(p => new
{
album = p.Key.alb,
artiste = p.Key.art,
count_lab = p.Count(),
lab = p.Select(x => x.Field<string>("label")).First(),
filp = p.Select(x => x.Field<string>("file_path")).First()
})
.OrderBy(x => x.lab)
select res;
return data;
}
这个查询设计得很好,我可以做的是 data = PrepareData();
并得到正确的结果。
我的问题是当我想做一个 .where
在...上 data
.
如果我这样做。
var album = data.Where(x => x.
那么我没有任何选项来选择一个单一的字段(如果我想做一个相同的 .Select()
).我试过 data.AsEnumerable()
之前,但没有成功。
我在想 IEnumerable<object> prepareData()
是罪魁祸首,但我不知道如何解决这个问题(如果是这样的话)。
我需要帮助
先谢谢你
如果你想选择一个单一的字段,你可以使用。First()
或 FirstOrDefault()
. 这两者的区别是。
First()
如果找不到元素,将抛出异常。FirstOrDefault()
如果没有找到元素,将返回null。另外,如果你想解决 IEnumerable<object>
你需要创建一个DTO类,在这个类中,你可以映射选择的所有项目。
就像这样。
public class DTOClass
{
public string album { get; set; }
public string artiste { get; set; }
public string count_lab { get; set; }
public string lab { get; set; }
public string filp { get; set; }
}
然后在select中,你可以简单地做:
...
Select(p => new DTOClass {
// map the values for DTO class here
}