LINQ的更新行,如果新行插入另一个表

问题描述:

我有4代表在这里,我试图更新时,新的行与另一个表中使用LINQLINQ的更新行,如果新行插入另一个表

CustomerTable的添加最后一项排:

CustomerId Name EmailId 
------------------------- 
1   Paul [email protected] 
2   John [email protected] 

下表我对每个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点是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

我可以使用sql在LINQ和触发找到解决方案?

+0

您正在使用哪些DBMS? Postgres的?甲骨文? – 2015-02-10 13:33:05

+0

我正在使用Sqlserver 2012 – stom 2015-02-10 13:36:53

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

+0

我们可以在Linq中使用触发器还是有其他方法 – stom 2015-02-10 13:34:09

+0

我对Linq没有太多想法..但是AFAIK我们可以使用Linq-to-SQL提供程序 – 2015-02-10 16:22:20

+0

非常感谢你karthik,我像你说的那样使用了触发器,最后它起作用了,很抱歉如此晚的接受你的答案。 – stom 2015-03-24 09:48:49

如何创建加入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 
+0

这样做的好处是,如果您因为某些原因需要删除LoyaltyDetailsTable条目,那么在下次阅读时自动更正查看 – jksemple 2015-02-10 13:13:39

+0

我得到的错误如下:关键字'BEGIN'附近的语法错误,更多的问题,使用此可以根据LoyaltyDetailsTable中的更改将PriceClaimTable行从200更新为231?我正在使用Sqlserver 2012 – stom 2015-02-10 13:32:31

+1

哪个DBMS在创建**视图时使用'begin .. end' **? – 2015-02-10 13:33:37

1,在你的数据引擎

,你可以使用触发器

2一样,你的程序

你可以代码的机制。

通常会伤害到性能,我将使用计划B

+0

嗨,我也喜欢代码机制,但我怎么能在Linq中实现这一点,我的意思是在另一个表中找到变化并更新表格行 – stom 2015-02-10 13:25:07

+0

感谢您的计划A,@karthik也提到过去触发器,计划B我不知道该怎么做,反正工作正常。 – stom 2015-03-24 10:02:00