gpt4 book ai didi

c# - 如何使用 LINQ 制作泛型函数?

转载 作者:太空狗 更新时间:2023-10-29 21:21:23 25 4
gpt4 key购买 nike

基于来自 here 的信息.

我发现了如何使用 Entity Framework 删除孤儿。

public void SaveChanges()
{
context.ReportCards
.Local
.Where(r => r.Student == null)
.ToList()
.ForEach(r => context.ReportCards.Remove(r));

context.SaveChanges();
}

我想知道如何为这部分制作通用函数,因为它可能会经常使用:

context.ReportCards
.Local
.Where(r => r.Student == null)
.ToList()
.ForEach(r => context.ReportCards.Remove(r));

我想过这样的事情:

public void SaveChanges()
{
RemoveOrphans(Student, ReportCards)
context.SaveChanges();
}

private void RemoveOrphans<T>(T sourceContext, T orphan)
{
context.orphan
.Local
.Where(r => r.sourceContext == null)
.ToList()
.ForEach(r => context.orphan
.Remove(r));
}

但是当然不行。有什么建议吗?

最佳答案

您可以编写执行相同操作的扩展方法:

public static void RemoveOrphans<TEntity>(this IDbSet<TEntity> entities,
Func<TEntity, bool> orphanPredicate)
where TEntity: class
{
entities.Local.Where(orphanPredicate).ToList().ForEach(e => entities.Remove(e));
}

然后这样使用

context.ReportCards.RemoveOrphans(r => r.Student == null);
context.SaveChanges();

您还可以使用接受 IDbSet<TEntity> 的简单通用方法作为第一个参数,但它不会那么可读

RemoveOrphans(context.ReportCards, r => r.Student == null);
context.SaveChanges();

关于c# - 如何使用 LINQ 制作泛型函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41937036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com