Linq如果在另一个表中插入新行,则更新一行

时间:2015-02-10 13:03:13

标签: c# .net linq

我这里有4个表,我正在尝试使用linq在另一个表中添加新行时更新最后一个输入行

CustomerTable的

CustomerId Name   EmailId
-------------------------
1          Paul   r@r.com
2          John   J@j.com

在下表中,我为每个LoyatyType分配点

LoyaltyPointTable

LoyaltyPointsId LoyaltyType     Points
---------------------------------------
1               Registration       10
2               Loginstatus         1
3               Downloading        10
4               Redemming           1
5               Sharing            20
6               Refer              10

LoyaltyDetailsTable

 LoyaltyDetailsId LoyaltyPointsId CustomerId Dates
 -------------------------------------------------
  1                    1            1       2015-01-22 
  2                    2            1       2015-01-22 
  3                    3            2       2015-01-22
  4                    3            1       2015-01-22 
  5                    4            1       2015-01-22
  6                    4            1       2015-01-24  
  7                    2            1       2015-01-24  // here one new row is added based on LoginStatus

他已经完成了一次登录,所以他的LoginStatus Point现在为1我希望在下面的另一个表中更新这一点

预期输出:

PriceClaimTable

PriceClaimId CustomerId PriceId  Current Points

1               2         22          150
2               1         23          200 // here update the last row of CustomerId as 231 
                                      //based on every new entry on LoyaltyDetailsTable

说他是否再次登录200 + 1 = 201
然后他正在下载201 + 10 = 211
然后他确实分享了211 + 20 = 231

我可以在Linq中使用sql触发器并为此找到解决方案吗?

3 个答案:

答案 0 :(得分:1)

使用可以使用triggers来完成这项工作。您可以查看this来写一个。

答案 1 :(得分:1)

如何在加入LoyaltyPointTable的LoyaltyDetailsTable上创建一个视图,该视图将LoyaltyPointTable.Points与每个客户相加,例如:类似的东西(取决于你的SQL方言)

CREATE VIEW PriceClaimView
AS

SELECT CustomerId, SUM(LPT.Points) AS CurrentPoints
FROM LoyaltyDetailsTable LDT INNER JOIN LoyaltyPointTable LPT ON    LDT.LoyaltyPointsId = LPT.LoyaltyPointsId
GROUP BY CustomerId

答案 2 :(得分:1)

1,在您的数据引擎

你可以使用触发器

2,你的程序

你可以编写一种机制。

通常trihger伤害表现,我会使用计划B