14

どうすればこの問題を解決できますか?

これが私のコードです:

    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)'を認識しません。

4

3 に答える 3

34

データベースに対して実行される Linq クエリは、実行前に SQL に変換されます。しかしcollection["txtDtInicial"]、同等の SQL 構文がなく、とにかくデータベースが にアクセスできないため、SQL に変換することはできませんcollectioncollection["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およびMinValue と MaxValue を初期化dtFimすることで、クエリで定義されているかどうかを確認する必要がなくなります。

于 2012-07-14T02:35:42.593 に答える
10

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();

参照http://mvc4asp.blogspot.in/

于 2014-09-08T14:49:07.733 に答える