2012-06-08 49 views
0

Linq中是否存在任何「IN」關鍵字可用於實體語法?我有一個列表框添加多個項目。我想在db中搜索這些項目。我的查詢是這樣的:Where條款針對多個選項

var result = context.data_vault 
         .Where(d => d.STATE == lstStates.SelectedItem.Text).OrderBy(d=>d.dv_id) 
         .Skip(e.NewPageIndex * GridView1.PageSize) 
         .Take(GridView1.PageSize) 
         .ToList(); 

我想要d => d.STATE == lstStates.Items。如何改變它?

+0

http://stackoverflow.com/questions/2334327/what-is-the-linq-equivalent-to-the- sql-in-operator可能會被忽略 – Devjosh

回答

1

代碼:

string[] arr = listview.Items 
         .Cast<ListItem>() 
         .Select(i => i.Text) // or .Value 
         .ToArray(); 

db.Where(d => arr.Contains(d.STATE); 

應該翻譯成查詢:

... WHERE STATE IN ('your', 'array', 'items') 
0

試試這個:

var result = context.data_vault 
         .Where(d => lstStates.Items.Contains(d.STATE)).OrderBy(d=>d.dv_id) 
         .Skip(e.NewPageIndex * GridView1.PageSize) 
         .Take(GridView1.PageSize) 
         .ToList(); 

這裏,

lstStates is List<string> 
+0

[ListItemCollection.Contains()](http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.listitemcollection.contains.aspx)接受ListItem而不是字符串 – abatishchev

+0

@abatishchev好的,同意了。我曾假設lstStates是列表(: –

0

您可以嘗試.Any().Contains()語法

例子是這樣的:

select d from context.Data 
Where ListofIdsFromUI.Any(d.Id) 
select d