【发布时间】: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