2011-11-06 68 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