LINQ方法使用Where,Contains和Foreach使用List <t>更新Entity.DbSet

时间:2018-08-23 08:55:38

标签: c# linq lambda

我使用实体框架生成数据库表类:

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(字符串apro_emp,字符串apro_date,列表数据),输入参数(列表数据)是领导者批准的是/否的最终结果列表。

我想使用AproData(ID,日期,时间)在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循环语法看起来不够聪明。

我想使用LINQ扩展方法(.Where,.Contains,.ForEach()等)和Lambdas来改进它,而不是使用C#“ foreach”语法。有人可以教我如何实施它吗?非常感谢。

p.s。抱歉,我的英语不好。.希望您理解我的问题。

1 个答案:

答案 0 :(得分:0)

尝试以下操作:

var results = (from item in Data
               join t in oEAME.TPTM605 on  item.emp  equals t.EMP
               where t.ATTD_DATE.Equals(item.attd_date) && t.ATTD_TIME.Equals(item.attd_time)
               select new { APRO_EMP = apro_emp, APRO_DATE = apro_date, APRO_YN = item.apro_yn }).ToList();