LINQ-запрос, игнорирующий результаты с определенными десятичными точками - PullRequest
2 голосов
/ 31 августа 2011

Мне нужно выполнить запрос LINQ для большой базы данных в C #.Один из столбцов, который мне нужно использовать в запросе, является двойным.Мне нужно опустить результаты, которые имеют более 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 ]

1 голос
/ 31 августа 2011

Можете ли вы попробовать с этим запросом ниже, и дайте мне знать.

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;
1 голос
/ 31 августа 2011

Что ж, вы можете решить эту конкретную ошибку, используя:

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

Обратите внимание на изменение от одинарных к двойным кавычкам.Тем не менее, это не поможет вам в целом.Какой тип fun.Units в LINQ?Если он десятичный, вы можете использовать:

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

... но мне не ясно, что это будет делать в сгенерированном SQL.Стоит попробовать, но даже если это сработает, вы должны увидеть, как выглядит SQL.

...