我有一個名為 SubcodeTable 的表,我想在 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;
}
}
uj5u.com熱心網友回復:
正如它所說的例外
> 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
uj5u.com熱心網友回復:
y.Whh_SubsidiaryCode.Substring(0,2) >'20'但它說
char 字面量中的字符太多
的確; 您只能'在 C# 中放入一個字符。如果要放置多個字符,則需要一個字串,該字串由"
運算子 > 不能應用于 string 和 char 型別的運算元
>因為數學運算不適用于一側的字串和另一側的字符。您可以在兩個字符或兩個字串上使用它,但不能混合使用
'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不大于因為第一個字符,不大于21Y12
除非您有其他類似的代碼21X,否則您可以轉儲LIKE '%Y%'/ Contains("y")- 這只會減慢速度
uj5u.com熱心網友回復:
我終于在 SQL 中得到了解決方案。通過使用LEN然后獲取長度,然后使用LEFT獲取前 2 個字符。
然后為條件創建一個 where 子句: LEFT(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 查詢結果,創建一個回傳滿足條件的函式。
代碼:
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));
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/414424.html
標籤:
