【发布时间】:2019-08-18 12:12:16
【问题描述】:
我有以下类,但我想在 LINQ 组表达式中使用它,但我遇到了错误。
namespace importService.Model
{
[DelimitedRecord(",")]
[IgnoreEmptyLines()]
public class Import
{
public int ID { get; set; }
public string ProductType { get; set; }
public Single? Weight { get; set; }
public string ProductName { get; set; }
public string NominalCode { get; set; }
public decimal Costings { get; set; }
public DateTime DateTimeCreated { get; set; }
public string ImportedBy { get; set; }
public string OrderUser { get; set; }
public bool isActive { get; set; }
public int Status { get; set; }
public long OrderNo { get; set; }
}
}
我正在尝试使用它在电子邮件中很好地分组
List<Import> orders = new List<Import>
orders=Filled in from select statment from dapper
orders = orders.GroupBy(g => g.OrderNo).ToList();
但是,我收到以下错误
Severity Code Description Project File Line Suppression State
Error CS0029 Cannot implicitly convert type >
System.Collections.Generic.List<System.Linq.IGrouping<long,
ImportService.Model.Import>>' to
'System.Collections.Generic.List<ImportService.Model.Import>'
在这种情况下,如何通过查询正确构建组?,我正在使用 dapper 填充我的订单元素,所以它被填充了,只是不想允许组。
瞄准 我的目标是,我可以根据班级中的订单号发送电子邮件截图,并在电子邮件底部显示每个不同订单号的总行。
应该是一封邮件一封邮件,其中每个总数都在每组 OrderNo 的行之后
foreach (var item in orders)
{
using (var tr = table.AddRow(classAttributes: "someattributes"))
{
tr.AddCell(item.OrderNo.ToString(), "style:font-bold;");
tr.AddCell(item.ProductName.ToString(), "style:font-bold;");
if (item.Status == (int)ImportStatus.NominalInvlaid)
{
tr.AddCell("Nominal Code Invlaid");
}
tr.AddCell(item.Costings.ToString(), "style:font-bold;");
tr.AddCell("DB", "style:font-bold;");
}
这应该显示在上面应该按顺序分组的行的底部
using (var tr = table.AddRow(classAttributes: "someattributes"))
{//this should be the total of item.costings a the bottom of the above
tr.AddCell(TotalOrdervalue.ToString(), "style:font-bold;");
}
}
【问题讨论】:
-
A GroupBy 创建一个二维数组;列表>。您正在尝试将
> 转换为 List -
@jdweng 它实际上是一个
IEnumerable<IGrouping<long, Import>>,其中可枚举中的每个项目都有一个Key类型为long,它本身就是一个IEnumerable<Import>。所以ToList的结果是List<IGrouping<long, Import>>,它与List<Import>不同。 -
请注意,如果您只想将所有行按
OrderNo排列成一个List<Import>,那么您应该改为使用OrderBy。事实上,你可以在你的 dapper 代码中使用的 SQL 中做到这一点。 -
那么这是一封电子邮件还是每个
OrderNo一封?如果是一封电子邮件,是所有总数都在底部还是每个总数都在每组OrderNo的行之后? -
@juharr 每个总数都在正确的每组 OrderNo 的行之后。