2012-06-08 46 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