我需要在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;
答案 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;