我有一个带有值的Cardtable
卡片表
ID Card No
------- ----------
1 | 0001-1234-5678-9001
2 | 0001-1234-5678-9002
3 | 0001-1234-5678-9003
4 | 0001-1234-5678-9004
5 | 0001-1234-5678-9005
现在我想在
LINQ
中使用Card No
在此表中进行搜索i.e. 0001-1234-5678-9001
(直接使用数字)或0001123456789001
(使用不带破折号的数字)有人可以帮忙吗?
最佳答案
在对其他答案的注释中,您表示要在服务器端执行查询。您可以通过将卡号转换为数据库中使用的标准卡号来实现:
String GetCanonicalCardNo(String cardNo) {
if (cardNo.Length == 19)
return cardNo;
if (cardNo.Length != 16)
throw new ArgumentException("Invalid card number.", "cardNo");
return String.Format(
"{0}-{1}-{2}-{3}",
cardNo.Substring(0, 4),
cardNo.Substring(4, 4),
cardNo.Substring(8, 4),
cardNo.Substring(12, 4)
);
}
此功能会将卡号转换为
0001-1234-5678-9001
。然后,您可以使用以下代码查找卡:
var canonicalCardNo = GetCanonicalCardNo(cardNo);
var card = Cards.FirstOrDefault(card => card.CardNo == canonicalCardNo);
用于选择卡的谓词仅包含可以在服务器端执行的字符串比较。