この質問にはすでに答えがあります。
私は自分のプロジェクトで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;
}
}
しかし、エラーは
ここで行:
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();
そして今使用するCount
Listのプロパティを呼び出してから、First()を呼び出します。
if (rrList.Count() != 0) // use the List rrList
{
txt_jtitle.Text = rr.First().j_title;
txtissn_p.Text = rr.First().issn_p;
}
次の行を変更する必要があります。
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)