【问题标题】:Update two lists update by timestamp linq for Entity Framework Core通过 Entity Framework Core 的时间戳 linq 更新两个列表
【发布时间】:2020-07-11 00:41:45
【问题描述】:

给定以下类型的两个列表,一个在我的数据库中(由 EF Core 支持),另一个列表从 Web 服务中获取:

public class Data
{
    public string Ticker { get; set; }
    public string Name { get; set; }
    public DateTime Updated { get; set; }
}

我有以下几点:

async Task SaveTickersToDatabaseAsync(IEnumerable<TickerV2> webData)
{
    using var scope = AsyncScopedLifestyle.BeginScope(this.container);            
    using var context = container.GetInstance<TickersDbContext>();

    try
    {
        var dbData = context.Tickers.Select( x => x);
            
        var toInsert = webData.Except(dbData);

        var toDelete = dbData.Where(c => !webData.Any(d => c.Ticker == d.Ticker)).ToList();
            
        var toUpdate = dbData
                        .Join(webData, db => db.Ticker, web => web.Ticker, (db, web) => new { Db = db, Web = web })
                        .Where(joined => joined.Web.Updated > joined.Db.Updated)
                        .Select(x => x.Web)
                        .ToList();

        context.AddRange(toInsert);
        context.RemoveRange(toDelete);
        context.UpdateRange(toUpdate);
        
        await context.SaveChangesAsync();

    }
    catch (Exception e)
    {
        this.logger.LogError(e, e.Message);
    }
}

然后写入 Entity Framework Core。

请问我怎样才能获得列表toUpdate,基于Ticker 匹配,但Updated 来自Web 服务数据的时间比数据库列表更新 - 这是正确的方法吗? “更新”?

【问题讨论】:

    标签: c# linq entity-framework-core


    【解决方案1】:

    如果我理解正确,您搜索查询:

    var toUpdate = fromWebService
        .Where(c => fromDatabase.Any(d => c.Ticker == d.Ticker && c.Updated > d.Updated))
        .ToList();
    

    【讨论】:

    • 嗨,Sajid,感谢您的回复,是的,这是有道理的 - 刚刚意识到可以添加一些与实体框架相关的进一步上下文
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2018-04-07
    • 2023-04-05
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 2018-04-27
    • 2021-09-13
    相关资源
    最近更新 更多