c# - 从函数运行的 linq 查询中获取单个字段
问题描述
我有一个返回 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(p => new DTOClass {
// map the values for DTO class here
}
推荐阅读
- javascript - lint-staged 未在预提交时运行
- python - Python Flask 通过浏览器中的刷新图标刷新
- excel-formula - Excel总和值如果存在于另一列没有vlookup
- android - 安卓系统中的心跳
- wpf - 使用 HierarchicalDataTemplates 为 TreeView 创建 WPF 上下文菜单
- scheme - 我如何检查一个列表是否有不同的对象(是一个集合?)或没有方案
- latex - itemize 环境中的居中表
- php - move_uploaded_file() 函数不会将上传的文件保存在服务器上
- validation - 如何使用特定字段组合将表限制为 5 条记录
- r - 更改 R Markdown 中的参考书目样式