首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Linq的WildCard搜索

基于Linq的WildCard搜索
EN

Stack Overflow用户
提问于 2014-06-27 06:21:14
回答 3查看 650关注 0票数 1

我有一张有价值的卡片

卡式

代码语言:javascript
复制
  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

现在我想使用LINQCard No在这个表中搜索

i.e. 0001-1234-5678-9001 (直接使用数字)或0001123456789001 (使用没有破折号的数字)

有人能帮忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-27 06:55:31

在对其他答案的注释中,您已经表示希望在服务器端执行查询。您可以通过将卡号转换为具有数据库中使用的格式的规范卡号来做到这一点:

代码语言:javascript
复制
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

然后,您可以使用如下代码找到一张卡片:

代码语言:javascript
复制
var canonicalCardNo = GetCanonicalCardNo(cardNo);
var card = Cards.FirstOrDefault(card => card.CardNo == canonicalCardNo);

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

票数 4
EN

Stack Overflow用户

发布于 2014-06-27 06:27:19

您可以通过比较Enumerable.Where中的条件语句来做到这一点。替换CardNumber和变量中的引线将使两个字符串都不带连字符,并且它将处理带连字符数和没有连字符数的两种情况。

代码语言:javascript
复制
var result = Cardtable
            .Where(c=> c.CardNumber.Replace("-", "") == cardVariable.Replace("-", ""));
票数 2
EN

Stack Overflow用户

发布于 2014-06-27 06:39:46

http://ideone.com/AyfBMm

代码语言:javascript
复制
        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);
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24445211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档