Mysql 使用LINQ构建动态查询
我是php/mysql进入asp.net的。我正在构建页面标题中的主卡片搜索表单。有一个文本输入、多个下拉列表(都指向不同的列)和一些条件搜索选项 对于mysql版本,我能够使用条件构建包含查询的sting,然后执行它Mysql 使用LINQ构建动态查询,mysql,asp.net-mvc,linq,asp.net-mvc-4,Mysql,Asp.net Mvc,Linq,Asp.net Mvc 4,我是php/mysql进入asp.net的。我正在构建页面标题中的主卡片搜索表单。有一个文本输入、多个下拉列表(都指向不同的列)和一些条件搜索选项 对于mysql版本,我能够使用条件构建包含查询的sting,然后执行它 //MySql/PHP example $query = "SELECT * FROM cards WHERE "; //Encounter_set if (isset($_GET['Encounter_Set']){ $query.= "Encounte
//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中实现这一点?使用(var context=new MyDbContext())
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
}
{
IQueryable query=context.Cards;
如果(!string.IsNullOrEmpty(遇到集合))
{
query=query.Where(c=>c.conference\u Set==conference\u Set);
}
开关(收音机)
{
违约:
案例“全部”:
query=query.Where(c=>c.Title.Contains)(术语)
||c.特征。包含(术语)
||c.Shadow_Text.Contains(术语)
||c.文本包含(术语));
打破
案例“标题”:
query=query.Where(c=>c.Title.Contains(terms));
打破
案例“特征”:
query=query.Where(c=>c.Traits.Contains(terms));
打破
案例“文本”:
query=query.Where(c=>c.Shadow\u Text.Contains(terms)
||c.文本包含(术语));
打破
}
// ...
return query.ToList();//执行查询
}
LINQ允许您编写查询。这个初始语句:var logs=from log in context.logs选择log代码>是否将从表中获取所有行?从表中提取每一行开始似乎效率很低。不,linq是懒惰的,它不会执行查询,直到您实际尝试枚举这些值为止