2016-11-22 10 views
0

배열 문자열에 의해 조건 다중 값이되는 linq를 사용하고 싶습니다. split(',') 폴더에 데이터 파일의 데이터를 나열합니다. (하지 데이터베이스) 코드 C#을LINQ : 배열 문자열별로 조건 다중 값을 사용자가 어떻게 사용할 수 있습니까?

public List<sFile> GettingFiles(string path) 
{ 
    //Read File in folder 
    List<sFile> allfile = new List<sFile>(); 
    DirectoryInfo di = new DirectoryInfo(path); 
    FileInfo[] fileinfo = di.GetFiles("*.*"); 

    foreach (FileInfo item in fileinfo) 
    { 
     allfile.Add(new sFile 
     { 
      FileName = item.Name, 
      Seq = int.Parse(item.Name.Substring(12, item.Name.Length - 12)), 
      PmnCode = item.Name.Substring(7, item.Name.Length - 12), 
      Path = item.DirectoryName, 
      Size = formatSize(item.Length), 
      SizeInt = int.Parse(item.Length.ToString()) 
     }); 
    } 
    return allfile; 
} 

public void btnQuery_Click(object sender, EventArgs e) 
{ 
    List<sFile> allFiles = GettingFiles(path); //List file in Folder 
    string pmnCode = txtPMNCode.Text.ToString(); //AAAA, BBBBB, CCCCC, DDDDD 
    string[] subPmnCode = pmnCode.Split(','); 
    string totalPmnCode = string.Empty; 

    foreach (string item2 in subPmnCode) 
    { 
     var queryData = from d in allFiles.AsQueryable() 
        where (d.PmnCode.Contains(item2)) 
        select d;      

     //Add Column 
     DataTable dt = new DataTable(); 
     dt.Columns.Add(enmField.NAME.ToString()); 
     dt.Columns.Add(enmField.SIZE.ToString()); 
     dt.Columns.Add(enmField.MODIFY_DATE.ToString()); 
     dt.Columns.Add(enmField.PATH.ToString()); 

     DataRow myRow = dt.NewRow(); 

     foreach (sFile item in queryData.ToList()) 
     { 
      myRow = dt.NewRow(); 
      myRow[enmField.NAME.ToString()] = item.FileName.Trim(); 
      myRow[enmField.SIZE.ToString()] = item.Size.Trim(); 
      myRow[enmField.MODIFY_DATE.ToString()] = item.Date; 
      myRow[enmField.PATH.ToString()] = item.Path.Trim() + "\\" + item.FileName.Trim(); 
    dt.Rows.Add(myRow); 
     } 

     gvDetail.DataSource = dt; 
     gvDetail.DataBind(); 
    } 
} 

예 데이터

Pmn Code 
AAAAA 
BBBBB 
CCCCC 
DDDDD 

내가 pmn_code에 의해 조건이 BBBBB,는 ddddd AAAAA입니다 wheer 내가 데이터

를 표시하려면 쿼리합니다
var queryData = from d in allFiles.AsQueryable() 
       where (d.PmnCode.Contains("AAAAA") && 
       d.PmnCode.Contains("BBBBB") && 
       d.PmnCode.Contains("DDDDD") 
) 
       select d; 

하지만 결과로 배열 문자열을 쿼리 할 수 ​​없습니다. 배열 linq을 어떻게 사용할 수 있습니까?

도와주세요. 감사합니다 사전)

+0

테이블 구조를 표시 할 수 있습니까? –

+0

지금까지 쿼리는 그러한 이름을 가진 파일을 반환합니다 :'AAAAA_BBBBBDDDDD' 당신은'||'을 의미합니까? –

답변

1

은 아마 당신은 시도 할 수 있습니다 :

var queryData = from p in allFiles.AsQueryable() 
       where subPmnCode.Any(val => p.PmnCode.Contains(val)) 
       select p; 
+0

정말 고마워요. 작업; D – nettoon493

0
var queryData = from d in allFiles.AsQueryable() 
       where (subPmnCode.Any(s => s.Trim().Equals(d))) 
       select d; 

확인을 d는 subPmnCode 배열의 요소의 일치하는 경우. 쉼표 구분 기호를 사용하여 배열로 문자열을 분할하여 생성 된 공백을 무시하도록 트림을 사용합니다.

+1

이 LINQ 문이이 질문에서 설명한 문제를 해결하는 이유에 대한 정보를 제공해주십시오. –