0

我有具有逗号分隔值的 LINQ 语句。我想查看我的字段是否与任何逗号分隔值匹配。

 public string IdentifyProductSKU(string Serial)
    {
        int Len = Serial.Length;

        var Split = from ModelSplitter in entities.Models
                     select ModelSplitter.m_validationMask.Split(',');

        var Product = (from ModelI in entities.Models
                       where ModelI.m_validation == 0 &&
                             ModelI.m_validationLength == Len &&
                             ModelI.m_validationMask.Contains(Serial.Substring(ModelI.m_validationStart, ModelI.m_validationEnd))
                       select ModelI.m_name).SingleOrDefault();

        return Product;
    }

解释代码:每个模型都有多个识别属性,例如。XX1,XX5,XX7 都是同一个产品。现在,当我传入序列号时,我想根据验证掩码识别产品。例如:XX511122441141 是 ProductA,YY123414124 是 ProductC。我只想在此查询中拆分,因此在此行中:

ModelI.m_validationMask.Contains(Serial.Substring(ModelI.m_validationStart, ModelI.m_validationEnd))

我想拆分验证掩码以查看序列是否包含任何验证掩码字符。这有意义吗?

4

2 回答 2

2

这是您将值拆分为列表的方式

 var split = context.Packs.Select(u => u.m_validationMask).ToList();
            List<String[]> list=new List<String[]>();
            foreach (var name in split)
            {
                String[] str = name.Split(',');
                list.Add(str);
            }

现在我需要知道如何在我的最终 EF 查询中使用该列表:

int Len = Serial.Length;

        var split = entities.Models.Select(u => u.m_validationMask).ToList();
        List<String[]> list = new List<String[]>();
        foreach (var name in split)
        {
            String[] str = name.Split(',');
            list.Add(str);
        }



        var Product = (from ModelI in entities.Models
                       where ModelI.m_validation == 0 &&
                             ModelI.m_validationLength == Len &&
                             list.Contains(Serial.Substring(ModelI.m_validationStart, ModelI.m_validationEnd))
                       select ModelI.m_name).SingleOrDefault();

        return Product;
于 2012-12-21T08:15:59.777 回答
0

我不完全理解你的意思或你想要做什么。但...

如果您的 ModelSplitter.m_malicationMask 可以像您所演示的那样被拆分,那么 Split 就是一个 List 。我不明白的是,如果你想匹配整个产品 A,或者只是前三个字符,你可以修改你的查询

var Product = (from ModelI in entities.Models
               where ModelI.m_validation == 0 &&
                         ModelI.m_validationLength == Len &&
                         ModelI.m_validationMask.Contains(Serial.Substring(ModelI.m_validationStart, ModelI.m_validationEnd))

               let productId = ModelI.m_name.Substring(0, 3)
               where split.Contains(productId)
               select ModelI.m_name).SingleOrDefault();

如果不匹配,产品现在应该为空,如果匹配,则为实际产品。

于 2012-12-14T13:01:22.177 回答