2009-10-08 24 views
4

我有半逗號分隔的名字的字符串:Usinq Linq選擇半逗號分隔的字符串中的項目?

string names = "Jane;Harry"; 

我也有客戶對象的列表:

public class Customer 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

List<Customer> customers = new List<Customer>(); 
customers.Add(new Customer(){FirstName="John", LastName="Doe"}); 
customers.Add(new Customer(){FirstName="Jane", LastName="Doe"}); 
customers.Add(new Customer(){FirstName="Harry", LastName="Potter"}); 

var query = from c in customers 
      select c; 

如何創建僅返回這些客戶具有查詢在半逗號分隔列表中的第一個名字?

有點像T-SQL SELECT FistName FROM customer WHERE FirstName IN (list) (在某種程度上)

回答

10

那麼,你真的應該拆分字符串,最多下手 - 否則,你會得到一個匹配「簡」,即使名單「珍妮特·哈利」。

你可以這樣做:

string[] validNames = names.Split(';'); 
var query = customers.Where(c => validNames.Contains(c.FirstName)); 

另一種選擇是使用HashSet,將執行好多了當列表是非常大的:

HashSet<string> validNames = new HashSet<string>(names.Split(';')); 
var query = customers.Where(c => validNames.Contains(c.FirstName)); 

我在這裏用點號而不是查詢表達式,因爲當你只是應用一個或兩個子句時它更簡單。作爲查詢表達式,它將是:

var query = from c in customers 
      where validNames.Contains(c.FirstName) 
      select c; 
1
List<string> firstnames = names.Split(';').ToList(); 

      var query = from c in customers 
         where firstnames.Contains(c.FirstName) 
         select c ;