从dtVoucherEntry中获取多个具有相同(金额)借方、转换类型和的slno,并使用LINQ将其设置为具有相同金额和转换类型的chcklist

a11xaf1n  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(95)
foreach(Cheque details in chklist)
{
    decimal? trantypeValue = dtVoucherEntry
            .Where(entry => entry.TranType == details.Trantype && entry.Debit == details.Amount)
            .Select(tran => tran.SlNo)
            .FirstOrDefault();  
    if (trantypeValue.HasValue)
    {
        details.SlNo = trantypeValue.Value;  
    }
}

这是我的代码片段。我有cklist与trantype卡和金额1.two数据与trantype卡和相同的金额在chklist和借方(金额),trantype卡dtVoucherEntry 2.two数据与相同的trantype和金额变化。
我想从凭证中设置检查列表的slno
示例:voucherentry包含两个数据Case 1 1. trantype- card,debit -50 2.trantype - card,debit -55 Case 2- 1. trantype-card,debit 50 2. trantype card,debit -50 Case 3-
1.信用卡,借记卡-50 2。借方55
类似于支票案例1:变换类型和金额分别相同。我想设置slno关于这两个条件,并设置slno的voucherentry清单slno

k5ifujac

k5ifujac1#

**更新:**根据会话,需要根据匹配的卡类型和金额(可以是多条记录)从列表中更新db中的slno。至少这是我的理解。在这种情况下,你可以通过linq来做,因为我使用了linqpad,它是一种不同的方法来保存记录到db。因此您可能需要调整SubmitChanges();来替换你如何更新记录的方式(EF或SP或ADO调用)。等)来源:cheqlist

db table

void Main()
{
    var chklist = new List<Cheque>() {
        new Cheque(){Trantype = "Card", Debit = 50.00M, SlNo = 111},
        new Cheque(){Trantype = "Card", Debit = 20.00M, SlNo = 222},
        new Cheque(){Trantype = "tt", Debit = 55.00M, SlNo = 333}
    };

    //find match
    var res = from t1 in chklist
            from t2 in DtVoucherEntry.Where(x => t1.Trantype == x.TranType && t1.Debit == x.Amount).DefaultIfEmpty()
            where t2 != null
            select new { t1.SlNo, t2 };

    //set db value for slno
    res.ToList().ForEach(fe => {
        DtVoucherEntry.Where(w=> w.TranType == fe.t2.TranType).ToList().ForEach(ffe=> ffe.SlNo = fe.SlNo);
        SubmitChanges();//use your way to submit change of DtVoucherEntry to db
    });

DtVoucherEntry.Dump();
    
}

public class Cheque
{
    public string Trantype { get; set; }
    public int SlNo { get; set; }
    public decimal? Debit { get; set; }

    public Cheque() { }
}

结果,用来自列表

的值更新了db slno

*!!我试着创建一个例子为您提供一些数据。请调整问题。另外,请确认类属性/列数据类型。并澄清您的问题,根据所提供的数据,您希望得到什么。

CREATE TABLE [dbo].[dtVoucherEntry](
    [id] INT IDENTITY(1,1) NOT NULL ,
    [TranType] [VARCHAR](20) NULL,
    [SlNo] [INT] NULL,
    [Amount] [DECIMAL](16, 2) NULL
PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

insert into DtVoucherEntry (trantype, slno, amount)
values
('Card', 0, 50),
('Card', 0, 55),
('tt', 0, 55)


和代码

void Main()
{
    var chklist = new List<Cheque>() {
        new Cheque(){Trantype = "Card", Debit = 50},
        new Cheque(){Trantype = "Card", Debit = 20},
        new Cheque(){Trantype = "tt", Debit = 50}
    };
    
        
    foreach (Cheque details in chklist)
    {
        decimal? trantypeValue = DtVoucherEntry.AsEnumerable()
                .Where(entry => entry.TranType == details.Trantype && entry.Debit == details.Amount)
                .Select(tran => tran.SlNo)
                .FirstOrDefault();
        if (trantypeValue.HasValue)
        {
            details.SlNo = trantypeValue.Value;
        }
    }
}

public class Cheque
{
    public string Trantype {get;set;}
    public decimal? SlNo {get;set;}
    public decimal? Amount {get;set;}
    
    public Cheque(){}
}

更新:请确认初始数据:- 如果不正确-请评论我需要调整的内容和位置DB x1c4d 1x

支票清单:

相关问题