2011-11-06 70 views
1

讓字符串項目等於「p1,p2,p3」,並在數據庫中每個的標識符存在如下p1 = 1,p2 = 2,p3 = 3。只有第一個項目在列表中正在返回我的查詢中,有關爲什麼?Linq查詢只返回數組的第一項

private List<int> getProjects(string projects) 
    { 

     String[] projectArray = projects.Split(','); 

     QMOIIEntities db = new QMOIIEntities(); 

     var projectList = db.wbs_projects 
      .Where(x => projectArray.Contains(x.prjName)) 
      .Select(x => x.prjID).ToList(); 

     return projectList; 
    } 

* * UPDATE 這個問題是空白的字符串中我改變

String[] projectArray = projects.Split(','); 

String[] projectArray = projects.Trim().Split(','); 
+2

這看起來像一個數據相關的問題。你可以給出db.wbs_projects的外觀樣本數據嗎? –

+2

您的縮進非常混亂 - 將'Contains'調用放在與Where調用相同的行上會更好,因爲它是其中的一部分 - 不是它的同位體,這是您的格式設置使它看起來像。 –

+0

你是否三重檢查了'projectArray'包含了你認爲它所做的事情?對於Db也是一樣。 'P2'或'p2'而不是'p2'就可以做到。 –

回答

4

下面的代碼使用相同的邏輯,你剛纔提到的一個在你的問題。我創建了虛擬數據。該代碼的行爲與預期相同,即輸出是與每個prjName對應的prjID。

void Main() 
{ 
    string projects = "p1,p2,p3"; 
    List<string> projectArray = projects.Split(',').ToList(); 

    TestEntities db = new TestEntities(); 
    db.wbs_projects = new List<TestEntities>(); 
    db.wbs_projects.Add(new TestEntities(){prjName = "p1",prjID="Test1"}); 
    db.wbs_projects.Add(new TestEntities(){prjName = "p2",prjID="Test2"}); 
    db.wbs_projects.Add(new TestEntities(){prjName = "p3",prjID="Test3"}); 

    var projectList = db.wbs_projects 
     .Where(x => projectArray.Contains(x.prjName)) 
     .Select(x => x.prjID).ToList(); 

    foreach(var item in projectList) 
    { 
     Console.WriteLine(item);//Test1,Test2,Test3 
    } 

} 

public class TestEntities 
{ 
    public List<TestEntities> wbs_projects{get;set;} 

    public string prjName{get;set;} 
    public string prjID{get;set;} 
} 
+0

謝謝你測試的代碼,讓我檢查字符串,我發現它的空白,更新以上... – marknery

+0

因此,現在一切工作正常? –

+0

這是字符串被返回的方式,就像「p1,p2,p3」,所以我不得不修剪它。 – marknery