LINQ 查询,其中列包含特定数字 >= 您要查询的特定值

LINQ query where column contains a specific number >= specific value you want to query

我有一个名为 SubcodeTable 的 table,我想在 SubsidiaryCode 中查询前 3 个字符 >= 到 21Y

Query in table where a column contains >= '21Y'
 SubcodeTable:
Column1         Column2
SubsidiaryCode  Desc
18Y-001         AAA
19Y-001         AAA
20Y-001         AAA
21Y-001         CCC
22Y-003         EEE
23Y-001         FF
So output should display:
Column1         Column2
SubsidiaryCode  Desc
21Y-001         CCC
22Y-003         EEE
23Y-001         FF

顺便说一句,SubsidiaryCode 的前 3 个字符代表年份,例如 21Y=2021。

我设法创建了一个 SQL 查询,那么如何在 LINQ 查询 中创建它?

SQL查询:

SELECT LEN (Whh_SubsidiaryCode) [StringLength],LEFT(Whh_SubsidiaryCode,2)[FirsttwoCharInSubCode]
,Whd_WHNo [RR NUMBER], Whh_SubsidiaryCode [SubsidiaryCode], Whd_WHSeqNo [SEQ], Whd_WHSplitSeqNo [SPLIT SEQ] ,Whd_WHIssuedQty [QTY],Saw_StockName [ITEM NAME],Saw_StockSpecs1 [ASSET DESCRIPTION]
FROM E_WHDetailEntry
JOIN E_WHHeaderEntry ON Whd_WHNo=Whh_WHNo
JOIN E_StockAndWorkMaster ON Whd_StockCode=Saw_StockCode
WHERE Whd_StockType='FS2'
AND Whh_SubsidiaryCode LIKE '%Y%' AND LEFT(Whh_SubsidiaryCode,2) >= '21'
ORDER BY Whh_SubsidiaryCode

所以这是我的 LINQ 查询,我尝试使用 y.Whh_SubsidiaryCode.Substring(0,2) >'20' 但它说汽车字面量和运算符中的字符过多 > 无法应用于字符串和字符类型的操作数。

private List<string> GetBudgetCodes()
{   
    using (var ctx = LinqExtensions.GetDataContext<NXpert.FixedAsset.DataAccess.FixedAssetDataContext>("AccountingDB"))
    {
        var list = (from x in ctx.DataContext.E_WHDetailEntries
                    join y in ctx.DataContext.E_WHHeaderEntries
                    on x.Whd_WHNo equals y.Whh_WHNo
                    where x.Whd_StockType == "FS2"
                     && y.Whh_SubsidiaryCode.Contains("y")
                     && y.Whh_SubsidiaryCode.Substring(0,2) >= '21'
                    select new { y.Whh_SubsidiaryCode }
                   ).DistinctBy(y => y.Whh_SubsidiaryCode).OrderBy(y => y.Whh_SubsidiaryCode).ToList();

        var budgetcode = list.Select(y => y.Whh_SubsidiaryCode.Trim()).ToList();
        return budgetcode;
    }
}

我终于在 SQL 中找到了解决方案。 通过使用 LEN 然后获取长度然后使用 LEFT 获取前 2 个字符。

然后为条件创建一个 where 子句: 左(Whh_SubsidiaryCode,2) >= '20'

SELECT LEN (Whh_SubsidiaryCode) [StringLength],LEFT(Whh_SubsidiaryCode,2)[FirsttwoCharInSubCode]
,Whd_WHNo [RR NUMBER], Whh_SubsidiaryCode [SubsidiaryCode], Whd_WHSeqNo [SEQ], Whd_WHSplitSeqNo [SPLIT SEQ] ,Whd_WHIssuedQty [QTY],Saw_StockName [ITEM NAME],Saw_StockSpecs1 [ASSET DESCRIPTION]
FROM E_WHDetailEntry
JOIN E_WHHeaderEntry ON Whd_WHNo=Whh_WHNo
JOIN E_StockAndWorkMaster ON Whd_StockCode=Saw_StockCode
WHERE Whd_StockType='FS2'
AND Whh_SubsidiaryCode LIKE '%Y%' AND LEFT(Whh_SubsidiaryCode,2) >= '20'
ORDER BY Whh_SubsidiaryCode

感谢大家的帮助。 关于 LINQ 我设法使用 List 查询结果,创建一个 returns 满足条件的函数。

代码:

 private static bool CodeFiltered(string code)
        {
            return ((Convert.ToInt32(code.Substring(0,2)) >= 20));
 
        }


      var lstBudgetCodes = GetBudgetCodes();
            List<string> ResultCode =new List<string>(lstBudgetCodes.FindAll(CodeFiltered));

y.Whh_SubsidiaryCode.Substring(0,2) >'20' but it says

Too many characters in char literal

确实;在 C# 中 ' 中只能放置一个字符。如果要放多个字符,需要一个字符串,由"

分隔

Operator > cannot be applied to operands of type string and char

> 作为数学运算不适用于一侧的字符串和另一侧的字符。您可以在两个字符或两个字符串上使用它,但不能在 mix

上使用
'a' > 'b'  //false
"a" > "b"  //false
"a" > "A"  //true - a is ASCII 97,  A is ASCII 65. 97 is greater than 65

我会说你可以简单地使用:

y.Whh_SubsidiaryCode >= "21Y" 

如果您的代码始终是 number number Y,但您应该知道这是字母数字比较。它适用于任何其他也是 number number Y 的代码。重要的是,100Y 的字符串 大于 21Y 因为第一个字符 1 不大于 2

除非你有像 21X 这样的其他代码,否则你可以转储 LIKE '%Y%' / Contains("y") - 这只会减慢速度

如异常所说

> cannot be applied to operands of type string and char.

您需要先解析 Whh_SubsidiaryCode 才能比较值。

所以这个

&& y.Whh_SubsidiaryCode.Substring(0,2) >= '21'

应该是这样的:

&& Convert.ToInt32(y.Whh_SubsidiaryCode.Substring(0,2)) > 21