mca*_*ara 13 c# asp.net-mvc linq-to-entities
我怎么解决这个问题?
这是我的代码:
DateTime dtInicio = new DateTime();
DateTime dtFim = new DateTime();
Int32 codStatus = 0;
if(!string.IsNullOrEmpty(collection["txtDtInicial"]))
dtInicio = Convert.ToDateTime(collection["txtDtInicial"]);
if(!string.IsNullOrEmpty(collection["txtDtFinal"]))
dtFim = Convert.ToDateTime(collection["txtDtFinal"]);
if (!string.IsNullOrEmpty(collection["StatusCliente"]))
Convert.ToInt32(collection["StatusCliente"]);
var listCLientResult = (from c in db.tbClientes
orderby c.id
where (c.effdt >= dtInicio || string.IsNullOrEmpty(collection["txtDtInicial"]) &&
(c.effdt <= dtFim || string.IsNullOrEmpty(collection["txtDtFinal"])) &&
(c.cod_status_viagem == codStatus || string.IsNullOrEmpty(collection["StatusCliente"])))
select c);
return View(listCLientResult);
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
LINQ to Entities无法识别方法'System.String get_Item(System.String)',该方法无法转换为存储库的表达式.
Tho*_*que 31
针对数据库执行的Linq查询在执行之前会被转换为SQL; 但collection["txtDtInicial"]无法转换为SQL,因为没有等效的SQL语法,无论如何数据库都没有访问权限collection.您需要首先提取collection["txtDtInicial"]到变量,并在查询中仅使用此变量.
这就是我要做的事情:
DateTime dtInicio = DateTime.MinValue;
DateTime dtFim = DateTime.MaxValue;
Int32 codStatus = 0;
if(!string.IsNullOrEmpty(collection["txtDtInicial"]))
dtInicio = Convert.ToDateTime(collection["txtDtInicial"]);
if(!string.IsNullOrEmpty(collection["txtDtFinal"]))
dtFim = Convert.ToDateTime(collection["txtDtFinal"]);
if (!string.IsNullOrEmpty(collection["StatusCliente"]))
codStatus = Convert.ToInt32(collection["StatusCliente"]);
var listCLientResult = (from c in db.tbClientes
orderby c.id
where (c.effdt >= dtInicio) &&
(c.effdt <= dtFim) &&
(c.cod_status_viagem == codStatus)
select c);
return View(listCLientResult);
Run Code Online (Sandbox Code Playgroud)
通过初始化dtInicio和dtFimMinValue和MaxValue,您无需检查它们是否在查询中定义.
小智 7
Linq查询最终转换为SQL查询,LINQ不知道如何处理Session ["UserName"](获取"UserName"项).
解决此问题的常用方法是使用您将分配Session ["UserName"]的局部变量以及您将在Linq查询中使用的局部变量...
喜欢
string loggedUserName = Session ["LogedUsername"].ToString();
var userdetail = dc.faculties.Where(a => a.F_UserName.Equals(loggedUserName)).FirstOrDefault();
小智 5
一行...
不要在Linq(Entity)查询中使用STRING转换函数!
错误:
user = db.Users.Where(u => u.Name == dt.Rows[i]["Name"].ToString()).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
正确:
string Name = dt.Rows[i]["Name"].ToString();
user = db.Users.Where(u => u.Name == Name).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)