Lambda LINQ语句中的C#Convert.ToDouble(value)

The*_*boy 6 c# linq

我有以下LINQ语句:

Items = Items.Where(p => p.LeadDatas.Any(
                         q =>
                         q.LeadField.Name == descriptor.Name &&
                         Convert.ToDouble(q.Value) == Convert.ToDouble(value)));
Run Code Online (Sandbox Code Playgroud)

q.Value是double的String值,也是double value的String值,这两个值都需要转换为double,以便可以比较它们的相等性.

当我调试这个LINQ语句时,我得到以下SQLException:

错误将数据类型varchar转换为float

我不知道为什么它不允许我这样做,但我想知道修复是什么,我需要我的两个值来比较这里的平等.

Jon*_*eet 7

首先,我将提取Convert.ToDouble(value)出一个局部变量:

double target = Convert.ToDouble(value);
Items = Items.Where(p => p.LeadDatas.Any(q =>
                             q.LeadField.Name == descriptor.Name &&
                             Convert.ToDouble(q.Value) == target));
Run Code Online (Sandbox Code Playgroud)

很有可能是尝试转换value问题,而不是尝试转换q.Value某些行.或者,可能是您有一行没有有效值.(你可以尝试使用,double.TryParse但我不确定这是多么好的工作......)

但是,首先将二进制浮点值与简单相等进行比较通常也是一个坏主意.您可能希望使用某种程度的容差(并且确切地说,如何使用LINQ to SQL是另一回事......)