0

この質問にはすでに答えがあります。

私は自分のプロジェクトでLINQをSQLに適用しましたが、時間がかかるため、検索を高速にするために検索を行いました。ここに

そして私の.csコードは

public static Func<DataClassesDataContext, int, IQueryable<editor_j_inf>>
editordetail1 = CompiledQuery.Compile((DataClassesDataContext db, int a) =>
                 from p1 in db.editor_j_infs
                 where p1.ed_journal_id == a
                 orderby p1.editor_id descending
                 select p1);   //Its my precompile process

public void editordetail()
{
    DataClassesDataContext db = new DataClassesDataContext();
    var rr = editordetail1(db,Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value)));
    if (rr.Count() != 0)
    {
        txt_jtitle.Text = rr.First().j_title;
        txtissn_p.Text = rr.First().issn_p;           
    }        
}

しかし、エラーはenter image description here


2 답변


3

ここで行:

editordetail1(db,Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value)));

を返すことは可能ですIEnumerable<T>。そしてあなたが呼ぶときCount()rr.Count()それからあなたはあなたの結果を列挙しました。

あなたが電話をかけているとき、それが理由First()以下では、2回目の列挙を試みています。

txt_jtitle.Text = rr.First().j_title;

戻り値を関数から変換してみてください。editordetail1リストに:

var rr = editordetail1(db,Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value)));
var rrList = rr.ToList();

そして今使用するCountListのプロパティを呼び出してから、First()を呼び出します。

if (rrList.Count() != 0) // use the List rrList
    {
        txt_jtitle.Text = rr.First().j_title; 
        txtissn_p.Text = rr.First().issn_p;           
    } 


0

次の行を変更する必要があります。

var rr = editordetail1(db,Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value)));
if (rr.Count() != 0)

に:

var rr = editordetail1.Invoke(db,Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value))).FirstOrDefault();
if (rr != null)

リンクされた質問


関連する質問

最近の質問