【发布时间】:2012-08-31 13:10:06
【问题描述】:
我必须连接两个表,但只返回第二个表中与第一个表中的记录关联的所有记录的“值”总和相同的那些记录。
from p in db.TPs
join n in db.TNs
on p.Key equals n.Key
where (decimal.Parse(p.Value) == db.TNs.Where( nn => nn.Key == p.Key )
.Sum( nn=> decimal.Parse(kk.Value)))
我正在使用实体框架代码优先。
当然,Linq 抱怨
LINQ to Entities 无法识别方法 'System.Decimal Parse(System.String)' 方法
表很大,我必须减少输出,所以在客户端进行这种转换是不可能的。列类型转换也不是一种选择。
SQL 查询是:
select * from TP as p
join * from TN as n on n.Key = p.Key
where p.Value = (select sum(cast(n.Value as decimal(12,2))) from TN where Key = p.Key)
【问题讨论】:
-
你试过用
Convert.ToDecimal代替decimal.Parse吗? -
@YograjGupta - 为什么会有帮助? SQL Server 也不知道
Convert。 -
因为当你使用 Convert.ToDecimal 时它会生成类似 CONVERT(Decimal(29,4),[t0].[value]) 的 sql,所以试试这个。
-
也许这个答案会有所帮助:Convert string to int in EF 4
-
@majkinetor,它正在工作,为了测试我使用这个 linq
from x in db.TestStringToDecimals select new { x.Id, val= Convert.ToDecimal(x.Value)}它正在为我生成 sqlSELECT [t0].[id] AS [Id], CONVERT(Decimal(29,4),[t0].[value]) AS [val] FROM [TestStringToDecimal] AS [t0]。
标签: c# sql linq entity-framework