我有一个带有值的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);


用于选择卡的谓词仅包含可以在服务器端执行的字符串比较。

10-08 11:37