2012-12-14 28 views
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)) 

我要拆分的驗證掩碼,以瞭解該系列包含任何驗證面具人物。這有意義嗎?

+0

做我的理解以及多個身份驗證屬性在單列中存儲爲逗號分隔字符串? – mipe34

+0

是它被存儲在單個列中:U6,U7,Y5,Y0。這是如何顯示在數據庫例如 –

回答

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; 
0

我不完全明白你的意思還是你正在嘗試做的。但是......

如果你已經證明了你的ModelSplitter.m_malicationMask可以indead被分割,然後拆分是一個列表即可。我不明白的是,如果你試圖匹配整個產品A,或只是前三個字符,你可以modifiy查詢

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

產品現在應該爲空,如果不匹配或acutal產品,如果它。

+0

驗證面具看起來是這樣的:U10031,U10030,U10016,U10017,U10018,U10019例如,所以我採取m_validationStart(表示爲驗證比較的起始位置)和m_validationEnd(這表明驗證的結束位置),基於此假設將序列與所提供的驗證之一進行匹配。 –