どうすればこの問題を解決できますか?
これが私のコードです:
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);
私が得ているエラーは次のとおりです。
LINQ to Entitiesは、リポジトリの式に変換できないメソッド 'System.String get_Item(System.String)'を認識しません。
データベースに対して実行されたLinqクエリは、実行される前にSQLに変換されます。ただし、同等のSQL構文がなく、データベースがcollection
にアクセスできないため、collection["txtDtInicial"]
をSQLに変換できません。最初に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);
dtInicio
とdtFim
をMinValueとMaxValueに初期化することにより、それらがクエリで定義されているかどうかを確認する必要はありません。
Linqクエリは最終的にSQLクエリに変換され、LINQはSession ["UserName"]( "UserName"アイテムを取得する)をどう処理するかを知りません。
これを回避する一般的な方法は、Session ["UserName"]を割り当て、Linqクエリで使用するローカル変数を使用することです...
お気に入り
文字列loggedUserName = Session ["LogedUsername"]。ToString();
var userdetail = dc.faculties.Where(a => a.F_UserName.Equals(loggedUserName))。FirstOrDefault();
一行で...
Linq(Entity)クエリで文字列変換関数を使用しないでください!
間違っています:
user = db.Users.Where(u => u.Name == dt.Rows[i]["Name"].ToString()).FirstOrDefault();
正解:
string Name = dt.Rows[i]["Name"].ToString();
user = db.Users.Where(u => u.Name == Name).FirstOrDefault();