gpt4 book ai didi

c# - 比较 Linq to Sql 查询中包含多个点的两个字符串

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:23 25 4
gpt4 key购买 nike

在我的 SQL 表中,我有一个带有 string 数据类型的版本列,其中包含典型的版本值,如“1.0.0”和“2.0.2”等。

我想写一个查询来检索版本低于/高于指定版本的所有记录。

例如,假设我的表是这样的:

                 ====MY TABLE====
version column2 column3 , ....
_________________________________________________
2.0.6 ... ... ...
2.0.5 ... ... ...
2.0.4 ... ... ...
2.0.3 ... ... ...

现在我想检索所有version小于等于2.0.5的记录

我的主要问题是输入(在本例中为 2.0.5)和 version 列值都是字符串。所以不能正常比较。

我试过了:

from o in MyTable.Where(w=> float.Parse(w.version) <= float.Parse(inputVersion) )
/* Other codes ommited for clarity */

但显然它会抛出异常,因为 2.0.3 不是 float 。

有一个method比较两个版本字符串,但我不能在 Linq2Sql 查询中使用它,因为它抛出异常说

"Method X has no supported translation to SQL."

我也试过:

from o in MyTable.Where(w=> Version.Parse(w.version) <= Version.Parse(inputVersion) )
/* Other codes ommited for clarity */

但它也会抛出同样的异常。

所以我的问题是如何比较 linq to sql 查询中的这些值?

最佳答案

您可以使用 ReplaceConvert.ToInt32() ,这些在 Linq2Sql 中得到翻译,这样您就不必先加载整个表,然后再处理。

这个查询将直接对数据库执行并只返回匹配的数据:

var matchingResults = from o in MyTable.Where(w=> Convert.ToInt32(w.version.Replace('.', '')) <= Convert.ToInt32(inputVersion.Replace('.', '')));

关于c# - 比较 Linq to Sql 查询中包含多个点的两个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32930919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com