Ham*_*mid 3 c# linq asp.net asp.net-mvc asp.net-mvc-3
我正在使用LINQ来访问我的数据库表.有些表可能有(数十万)记录.
使用如下语句从表中读取:
var records = db.Logs;
Run Code Online (Sandbox Code Playgroud)
将使应用程序非常慢.它将立即加载所有记录.
我需要使用多个条件来过滤结果,例如:
if (UserID != null)
{
records = records.Where(r => r.User == UserID);
}
if (UserIP != null)
{
records = records.Where(r => r.IP == UserIP);
}
Run Code Online (Sandbox Code Playgroud)
问题是我从表中的第一次读取将带给我所有记录,并将使应用程序非常慢.
有没有办法在LINQ语句中创建条件(if,switch),就像我们以前的SQL语句一样?
这是多久以来创建的逻辑:
string sql = "SELECT * FROM Log WHERE 1=1";
if (UserID != null)
{
sql += " AND User = '" + UserID + "'";
}
if (UserIP != null)
{
sql += " AND IP = '" + UserIP + "'";
}
sqlCmd.query(sql);
Run Code Online (Sandbox Code Playgroud)
实际上是一个如下任务:
var records = db.Logs;
Run Code Online (Sandbox Code Playgroud)
不立即执行查询.它只准备稍后使用的数据结构.查询的执行仅在代码需要数据时发生,并且任何where子句都集成在查询中,从而阻止它返回整个表.
完全有可能做这样的事情:
var records = db.Logs;
if (filter1) records = records.Where(r => r.Field1 == condition1);
if (filter2) records = records.Where(r => r.Field2 == condition2);
Run Code Online (Sandbox Code Playgroud)
这将以执行一个查询结束,其中包含(种类)动态where语句.
但是,您应该定义正确的索引.
| 归档时间: |
|
| 查看次数: |
1117 次 |
| 最近记录: |