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
我有一个名为 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