【发布时间】:2018-08-23 08:55:38
【问题描述】:
我使用Entity Framework来生成Database表类:
public partial class TPTM605
{
public string EMP { get; set; }
public string ATTD_DATE { get; set; }
public string ATTD_TIME { get; set; }
public string MAC_NO { get; set; }
public Nullable<decimal> GPS_LATI { get; set; }
public Nullable<decimal> GPS_LONG { get; set; }
public string APRO_EMP { get; set; }
public string APRO_DATE { get; set; }
public string APRO_YN { get; set; }
public string PROC_DATE { get; set; }
public string ERR_CODE { get; set; }
public string KN_DATE { get; set; }
}
然后我创建另一个类:
public class AproData
{
// Employee ID
public string emp { get; set; }
// Attendance Date
public string attd_date { get; set; }
/// Attendance time
public string attd_time { get; set; }
// Approve (Y/N)
public string apro_yn { get; set; }
}
在TPTM605类中,其属性(EMP、ATTD_DATE、ATTD_TIME)为主键,属性(APRO_YN)的默认值为null。 然后我创建了一个WCF方法-SetAproMissCard(string apro_emp, string apro_date, List Data),输入参数(List Data)是一个领导批准Yes/No的最终结果的List。
我想使用 AproData(ID, date, time) 在 DbSet 中查找记录, 然后使用 AproData(apro_yn) 更新 TPTM605 的属性(APRO_YN)。
public bool SetAproMissCard(string apro_emp, string apro_date, List<AproData> Data)
{
bool rst = false;
try
{
using (OracleEmpAppModelEntities oEAME = new OracleEmpAppModelEntities())
{
foreach (var item in Data)
{
oEAME.TPTM605.Where(t => t.EMP.Equals(item.emp) && t.ATTD_DATE.Equals(item.attd_date) && t.ATTD_TIME.Equals(item.attd_time))
.ToList().ForEach(t => { t.APRO_EMP = apro_emp; t.APRO_DATE = apro_date; t.APRO_YN = item.apro_yn; });
}
oEAME.SaveChanges();
}
rst = true;
}
它工作正常。但是 C# foreach-loop 语法看起来不够聪明。
我想使用 LINQ 扩展方法(.Where、.Contains、.ForEach() 等)和 Lambda 来改进它,而不是使用 C#“foreach”语法。谁能教我如何实现它?非常感谢。
附言抱歉,我的英语很差。希望你能理解我的问题。
【问题讨论】:
-
嗨@Leo。如果你有例外,为什么不在这里发布呢?
-
嗨@Boris,例外是“无法构建'WcfServiceCsbcEmpApp.Models.AproData'。上下文仅支持基本类型或IEnumerable类型。”。对不起,那个异常信息是繁体中文。我试着翻译一下。谢谢。
-
试着把它变成一个对象:public bool SetAproMissCard(string apro_emp, string apro_date, object Data)
-
嗨,@jdweng,实际上,我想找到一组 LINQ 方法(例如 Where、Contains、ForEach 等),而不是最初使用 C# foreach -loop。谢谢。
-
我知道这很挑剔,但
ForEach不是 Linq。这是List<T>的正常方法。 Linq 中的 Q 代表 query,ForEach用于采取行动,而不是查询。