我有一张有价值的卡片
卡式
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 (使用没有破折号的数字)
有人能帮忙吗?
发布于 2014-06-27 06:55:31
在对其他答案的注释中,您已经表示希望在服务器端执行查询。您可以通过将卡号转换为具有数据库中使用的格式的规范卡号来做到这一点:
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);用于选择卡的谓词只包含可在服务器端执行的字符串比较。
发布于 2014-06-27 06:27:19
您可以通过比较Enumerable.Where中的条件语句来做到这一点。替换CardNumber和变量中的引线将使两个字符串都不带连字符,并且它将处理带连字符数和没有连字符数的两种情况。
var result = Cardtable
.Where(c=> c.CardNumber.Replace("-", "") == cardVariable.Replace("-", ""));发布于 2014-06-27 06:39:46
http://ideone.com/AyfBMm
List<Cardtable> cardtable = new List<Cardtable>();
cardtable.Add(new Cardtable() { id = 1, cardno = "0001-1234-5678-9001" });
cardtable.Add(new Cardtable() { id = 2, cardno = "0001-1234-5678-9002" });
string search_string = "0001-1234-5678-9002";
var result = from c in cardtable
where c.cardno.Replace("-", "") == search_string.Replace("-", "")
select c;
foreach (Cardtable ct in result)
{
Console.WriteLine("{0}:{1}", ct.id, ct.cardno);
}https://stackoverflow.com/questions/24445211
复制相似问题