【问题标题】:Linq query assistanceLinq 查询帮助
【发布时间】:2011-01-21 12:37:50
【问题描述】:

我有一个屏幕,用户可以在其中选择他们想要订阅的类别。他们可以选择零到多个类别。这些存储在 UserCategory 表中,该表具有用户 ID 和类别 ID。

所以,如果用户从 8 个类别中选择 2 个,我会写两行,分别是类别 ID 和用户 ID。

(他现在被分配到两个类别)

但是,如果用户返回并取消选择其中一个类别,然后添加 2 个不同的类别,他现在被分配到 3 个类别...

但我不确定在 linq 中处理这个问题的好方法......不知何故,我需要做类似......从 UserCategories 中删除 userId = :UserId 和 CategoryId 不在类别 ID 的 int[] 中传入.... 然后我需要 INSERT INTO UserCategories ... int[] 类别 ID,但不是已经存在的。

我需要在 Linq 中使用 Entity Framework 来做这件事……有人可以帮忙吗?

【问题讨论】:

    标签: c# linq entity-framework entity


    【解决方案1】:

    最简单的解决方案可能是将用户从所有当前类别中删除,然后重新添加到仍被选中的类别中。虽然您可能会再次删除和添加相同的信息,但它使代码更简单,更简单的代码更易于维护。

    因此,您将从数据库中读取当前信息并将其呈现在表单上。然后当用户点击“确定”时,清除数据库中的当前信息(当然,将副本保存在内存中),然后将其添加回来,就好像这是第一次通过代码一样。

    【讨论】:

    • 谢谢@ChrisF - 这当然是我可能会使用的一个选项。我可以从 UserId = :UserId 的表中删除,然后根据类别的 int[] 重新添加。这很容易,也很快,所以我可能会走那条路。只是等着看是否还有其他方法-因为我确实存储了审计数据(创建日期链接,以及创建它的人)。执行此方法将删除所有审计数据。
    • @cdotlister - 需要审计数据会使事情复杂化。唔。在这种情况下不知道如何处理。
    • 我走了这条路...因为这是一个链接表,只是用来帮助用户选择,我决定在这种情况下,我们不需要审核表。用户是唯一可以改变这一点的人。这是一种偏好。所以,完成了。谢谢。