2012-12-15 121 views
0

我将rebuilding this website php/mysql导入到asp.net中。我正在构建页面标题中的主卡搜索表单。有一个文本输入,多个下拉列表(全部指向不同的列)和一些条件搜索选项。使用LINQ构建动态查询

对于mysql版本,我能够使用条件来构建包含查询的sting,然后执行它。

//MySql/PHP example 
$query = "SELECT * FROM cards WHERE "; 

    //Encounter_set 
if (isset($_GET['Encounter_Set']){ 
    $query.= "Encounter_Set=:Encounter_Set AND "; 
    $queryArray['Encounter_Set'] = $_GET['Encounter_Set']; 
} 

//radio statements 
switch ($_GET['radio']) { 
    case "All":  $query.= "(Title LIKE :terms OR Traits LIKE :terms OR Shadow_Text LIKE :terms OR Text LIKE :terms)";break; 
    case "Title": $query.= "(Title LIKE :terms)";break; 
    case "Traits": $query.= "(Traits LIKE :terms)";break; 
    case "Text": $query.= "(Shadow_Text LIKE :terms OR Text LIKE :terms)"; break; 
    default:  $query.= "(Title LIKE :terms OR Traits LIKE :terms OR Shadow_Text LIKE :terms OR Text LIKE :terms)"; 
} 

//Finally 
$result = $db_con->prepare($query); 

我该怎么去做这件事在LINQ?

+1

LINQ允许您撰写查询。 http://stackoverflow.com/questions/11194/conditional-linq-queries –

+0

不会这inital声明:'var logs =从登录上下文.Logs选择日志;'将得到所有行表?从表中拉出每一行开始似乎效率不高。 – Mason240

+1

不,linq是懒惰的,它不会执行查询,直到您实际尝试枚举值 –

回答

2
using (var context = new MyDbContext()) 
{ 
    IQueryable<Card> query = context.Cards; 
    if (!string.IsNullOrEmpty(Encounter_Set)) 
    { 
     query = query.Where(c => c.Encounter_Set == Encounter_Set); 
    } 
    switch (radio) 
    { 
     default: 
     case "All": 
      query = query.Where(c => c.Title.Contains(terms) 
       || c.Traits.Contains(terms) 
       || c.Shadow_Text.Contains(terms) 
       || c.Text.Contains(terms)); 
      break; 
     case "Title": 
      query = query.Where(c => c.Title.Contains(terms)); 
      break; 
     case "Traits": 
      query = query.Where(c => c.Traits.Contains(terms)); 
      break; 
     case "Text": 
      query = query.Where(c => c.Shadow_Text.Contains(terms) 
       || c.Text.Contains(terms)); 
      break; 
    } 
    // ... 
    return query.ToList(); // Execute the query 
}