c# - C# 计算 LINQ 查询中的字段
问题描述
我需要一些帮助来计算我的 Linq 查询中的属性。
我知道我需要在某处使用“let”,但我想不通!
所以,首先我有这个方法从数据库中获取我的列表:
public BindingList<Builders> GetListBuilders()
{
BindingList<Builders> builderList = new BindingList<Builders>();
var ctx = new IWMJEntities();
var query = (from l in ctx.tblBuilders
select new Builders
{
ID = l.BuilderID,
Projeto = l.NomeProjeto,
Status = l.Status,
DataPedido = l.DataPedido,
DataPendente = l.DataPendente,
DataEntregue = l.DataEntregue,
DataAnulado = l.DataAnulado
});
foreach (var list in query)
builderList.Add(list);
return builderList;
}
然后,我有一个函数可以根据状态计算日期之间的天数:
public int GetDays()
{
int Dias = 0;
foreach (var record in GetListBuilders)
{
if (record.Status == "Recebido")
{
Dias = GetBusinessDays(record.DataPedido, DateTime.Now);
}
else if (record.Status == "Pendente")
{
Dias = GetBusinessDays(record.DataPedido, (DateTime)record.DataPendente);
}
else if (record.Status == "Entregue")
{
Dias = GetBusinessDays(record.DataPedido, (DateTime)record.DataEntregue);
}
else if (record.Status == "Anulado")
{
Dias = GetBusinessDays(record.DataPedido, (DateTime)record.DataAnulado);
}
}
return Dias;
}
我需要在 DataGridView 中调用 GetDays 来给出每条记录的天数。
我的大问题是,我如何得到这个?将它包含在 Linq 查询中?调用 GetDays()(需要将每条记录的 ID 传递给 GetDays() 函数)!?
有什么帮助吗?
谢谢
解决方案
我认为创建扩展方法会更容易:
public static int GetBusinessDays(this Builders builder) // or type of ctx.tblBuilders if not the same
{
if (builder == null) return 0;
switch(builder.status)
{
case "Recebido": return GetBusinessDays(builder.DataPedido, DateTime.Now);
case "Pendente": return GetBusinessDays(builder.DataPedido, (DateTime)builder.DataPendente);
case "Entregue": return GetBusinessDays(builder.DataPedido, (DateTime)builder.DataEntregue);
case "Anulado": GetBusinessDays(builder.DataPedido, (DateTime)builder.DataAnulado);
default: return 0;
}
}
然后,这样称呼它:
public BindingList<Builders> GetListBuilders()
{
BindingList<Builders> builderList = new BindingList<Builders>();
var ctx = new IWMJEntities();
var query = (from l in ctx.tblBuilders
select new Builders
{
ID = l.BuilderID,
Projeto = l.NomeProjeto,
Status = l.Status,
DataPedido = l.DataPedido,
DataPendente = l.DataPendente,
DataEntregue = l.DataEntregue,
DataAnulado = l.DataAnulado,
Dias = l.GetBusinessDays()
});
foreach (var list in query)
builderList.Add(list);
return builderList;
}
为了做得更好,要将对象转换为新对象,您应该创建一个映射器。
推荐阅读
- android - RecyclerView addOnScrollListener 与 FirebaseRecyclerAdapter
- excel - 从另一个现有工作簿中获取数据
- excel - SUMIF 向下行和跨列
- ios - 无法访问 ios 捆绑资源
- c# - 具有长时间运行方法和停止它的方法的类的模式
- java - 如何等到四个不同的方法完成,然后在 Android/Java 中执行另一个不同的方法
- reactjs - React Native - 如何在无状态函数组件中初始化 OneSignal?
- python - 如何创建 xlsx 报告以列出 odoo 中实体的所有记录?
- svg - Leaflet 中的彩色 SVG 图标
- python - 在 OpenCV VideoCapture 或 Vidgear 中访问/打开嵌入式视频