LINQ查询,忽略具有某些小数点的结果

时间:2011-08-31 09:46:31

标签: c# linq double where-clause decimal-point

我需要在C#中的大型数据库上执行LINQ查询。我需要在查询中使用的一个列是double。我需要省略此列中超过4个小数位的结果。数据库无法更改,因为其他程序需要使用它并使用我不想要的东西。然后将结果添加到列表中以供稍后使用。我认为这会奏效。

where fun.Units != '*.?????*'

然而,它返回错误,即字符文字中有太多字符。 到目前为止整个查询看起来像这样

var clientQuery1 = from cli in main1.Clients
                   from pol in main1.Policies
                   from fun in main1.FundHoldings
                   from uni in main1.UnitPrices
                   where cli.AccountNumber == accNum
                   && pol.ClientRef == cli.ClientRef
                   && fun.FKeyRef == pol.PolicyRef
                   && uni.UnitPriceRef == fun.UnitPriceRef
                   && fun.Units != '*.?????*'
                   select uni.UnitName;

2 个答案:

答案 0 :(得分:1)

您可以使用以下方法解决特定错误:

&& fun.Units != "*.?????*"

请注意从单引号到双引号的更改。但是,这不会对你有所帮助。 LINQ中fun.Units的类型是什么?如果是十进制,则可能能够使用:

&& decimal.Round(fun.Units, 4) == fun.Units

...但我不清楚在生成的SQL中会做什么。值得一试,但即使它有效,你也应该看看SQL的样子。

答案 1 :(得分:1)

您可以尝试使用以下查询并告知我们。

var clientQuery1 = from cli in main1.Clients
                   from pol in main1.Policies
                   from fun in main1.FundHoldings
                   from uni in main1.UnitPrices
                   where cli.AccountNumber == accNum
                   && pol.ClientRef == cli.ClientRef
                   && fun.FKeyRef == pol.PolicyRef
                   && uni.UnitPriceRef == fun.UnitPriceRef
                   && fun.Units == Math.Round(Convert.ToDouble(fun.Units),4)
                   select uni.UnitName;