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 全体または最初の 3 文字のみを一致させようとしている場合、クエリを変更できることです。

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();

製品が一致しない場合は null になり、一致する場合は実際の製品になります。

于 2012-12-14T13:01:22.177 に答える