c# - 在 C# 中使用 LINQ 将项目添加到 IList?
问题描述
这是我的模型 SigningAbsenceType
public class SigningAbsenceType
{
public float YearAbsence { get; set; }
public float SickAbsence { get; set; }
}
我想将来自 LINQ 的新项目添加到模型中的每个项目
var getType = oracleConn.SelectAbsenceType(EmployeeID).Select(t => t.Type).Distinct().ToArray();
IList<SigningAbsenceType> result = new List<SigningAbsenceType>();
for (int i = 0; i < getType.Length; i++)
{
string t = getType[i];
switch (getType[i])
{
case "A":
var YearAbsence = oracleConn.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "A")
.GroupBy(g => g.Type)
.Select(h => new
{
TotalHour = h.Sum(s => s.TotalHour)
});
break;
case "S":
var SickAbsence = oracleConn.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "S")
.GroupBy(g => g.Type)
.Select(h => new
{
TotalHour = h.Sum(s => s.TotalHour)
});
break;
}
}
return result;
如何YearAbsence
在 LINQ 中插入IList<SigningAbsenceType> result
我.ToList()
在 LINQ 中尝试过,然后添加到结果中result.Add(new SigningAbsenceType { YearAbsence = YearAbsence });
但是错误是Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<<anonymous type: float TotalHour>>' to 'float'
请帮助,我花了一整天的时间来解决这个问题,但没有结果。非常感谢
编辑:我已经解决了
var getType = oracleConn.SelectAbsenceType(EmployeeID).Select(t => t.Type).Distinct().ToArray();
List<SigningAbsenceType> result = new List<SigningAbsenceType>();
float yA = 0;
float sickAbsence = 0;
float harmfulAbsence = 0;
float unauthorizedAbsence = 0;
float personalAbsence = 0;
float compensatoryAbsence = 0;
for (int i = 0; i < getType.Length; i++)
{
string t = getType[i];
switch (getType[i])
{
case "A":
yA = oracleConn.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "A").Sum(s => (s.TotalHour)/8);
break;
case "S":
sickAbsence = oracleConn.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "S").Sum(s => (s.TotalHour) / 8);
break;
case "HA":
harmfulAbsence = oracleConn.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "HA").Sum(s => (s.TotalHour) / 8);
break;
case "N":
unauthorizedAbsence = oracleConn.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "N").Sum(s => (s.TotalHour) / 8);
break;
case "P":
personalAbsence = oracleConn.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "P").Sum(s => (s.TotalHour) / 8);
break;
case "H":
compensatoryAbsence = oracleConn.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "H").Sum(s => (s.TotalHour) / 8);
break;
default:
break;
}
}
result.Add(new SigningAbsenceType
{
YearAbsence = yA,
SickAbsence = sickAbsence,
HarmfulAbsence = harmfulAbsence,
CompensatoryAbsence = compensatoryAbsence,
PersonalAbsence = personalAbsence,
UnauthorizedAbsence = personalAbsence
});
return result;
解决方案
注意:在 Mrinal Kamboj 评论后更新
因此,根据getType[i]
您创建匿名类型对象的结果,aYearAbsence
或 a SickAbsence
,并且您希望将此匿名类型对象添加到 a IList<SigningAbsenceType>
。
唉,你只能将类的对象添加SigningaAbsendType
到你的列表中,毕竟,你将它定义为一个SigningaAbsendType
.
最简单的方法是将YearAbsence
and声明SickAbsence
为 class 的对象SigningaAbsendType
:
switch (getType[i])
{
case "A":
IEnumerable<SigningAbsenceType> fetchedSingingAbsences = oracleConn
.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "A")
.GroupBy(g => g.Type)
.Select(h => new SigningAbsenceType
{
YearAbsence = h.Sum(s => s.TotalHour),
SickAbsence = 0.0,
})
.ToList();
// now you can add the fetched data to the list!
foreach(SingingAbsence fetchedSigningAbsence in fetchedSingingAbsences)
{
result.AddRange(fetchedSigningAbsence);
}
break;
case "S": // something similar
另一种非常相似的方法是:
switch (getType[i])
{
case "A":
IEnumerable<float> fetchedYearAbsences = oracleConn
.SelectAbsenceType(EmployeeID)
.Where(k => k.Type == "A")
.GroupBy(g => g.Type)
.Select(h => h.Sum(s => s.TotalHour));
// add to the list:
foreach (float fetchedYearAbsence in fetchedYearAbsences)
{
result.Add(new SigningAbsenceType
{
YearAbsence = fetchedYearAbsence,
SickAbsence = 0.0f;
});
}
break;
推荐阅读
- javascript - JavaScript 在浏览器选项卡关闭和浏览器关闭时执行一些操作
- php - 如何将字符串转换为包含 2 个单词和空格的数组
- search - 寻找完全匹配?
- java - Java,搜索给定模式的文件并获取目录名和完整文件名
- javascript - Javascript 正则表达式为 div 着色
- excel - 让用户从 Excel 中打开的工作簿中选择一张工作表
- android - 在 Android 按钮中嵌入 HTML 链接
- listview - 如何从 uwp 的列表视图中更改所选项目?
- azure-cosmosdb - 为什么不越过 RU 时 COSMOS 会节流
- java - 获取 java.lang.NoClassDefFoundError