2011-06-14 94 views
2

我想从linq查询中得到一个列表,但我不知道如何。请帮忙。如何从linq查询中获取字符串列表?

我的代码如下,但不正确。

public List<string> SearchName(string pre) 
{ 
    VettingDataContext dc = new VettingDataContext(_connString); 
    List<string> query = (from a in dc.Accounts 
          where (a.FirstName + " " + a.LastName).StartsWith(pre) 
          select new {Name = a.FirstName + " " + a.LastName }).Distinct().ToList(); 
} 

回答

3

尽量简单地选择一个字符串值:

public List<string> SearchName(string pre) 
{ 
    VettingDataContext dc = new VettingDataContext(_connString); 
    List<string> query = (from a in dc.Accounts 
          where (a.FirstName + " " + a.LastName).StartsWith(pre) 
          select (a.FirstName + " " + a.LastName)).Distinct().ToList(); 
} 
0

你靠近。尝试:

public List<string> SearchName(string pre) 
{ 
    VettingDataContext dc = new VettingDataContext(_connString); 
    List<string> query= (from a in dc.Accounts 
       where (a.FirstName + " " + a.LastName).StartsWith(pre) 
         select a.FirstName + " " + a.LastName) 
         .Distinct().ToList(); 
} 
2

这将是更好的只有一次评估名称(部分原因是因为它意味着避免重复自己) - 和不使用匿名类型无故:

public List<string> SearchName(string pre) 
{ 
    VettingDataContext dc = new VettingDataContext(_connString); 
    return dc.Accounts 
      .Select(a => a.FirstName + " " + a.LastName) 
      .Where(name => name.StartsWith(pre)) 
      .Distinct() 
      .ToList(); 
} 

注意如何是那些我认为使用点符号代替查询表达式符号更有意义的时代之一。

+0

完全同意点符号点。我的基本标准是,如果我发现自己不得不用圆括号包装查询表达式并在其上使用点符号,那么是时候转换所有东西了。如果它想要在查询表达式语法中使用更清晰的东西,我会写它,将它分配给某个东西,然后对该变量执行其余的操作。 – Shibumi 2011-06-14 18:22:04

+0

@Shibumi:这就是我平时所做的事情:)我*有时*只是将括号中的查询表达式包装为* single *方法调用(例如ToList),但如果我得到的不止这些,就会变得混乱。 – 2011-06-14 18:27:09

相关问题