我已经在我的项目中将linq应用于sql并且花了很多时间所以我进行了搜索以使其快速进行搜索并从here
获取参考我的.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;
}
}
但错误是
答案 0 :(得分:3)
这一行:
editordetail1(db,Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value)));
可以返回 IEnumerable<T>
。当您在Count()
中致电rr.Count()
时,您就会列举结果。
这就是为什么当你在下面调用First()
时,你试图第二次枚举。
txt_jtitle.Text = rr.First().j_title;
尝试将您的返回值从函数editordetail1
转换为List:
var rr = editordetail1(db,Convert.ToInt32(Server.HtmlEncode(Request.Cookies["j_id"].Value)));
var rrList = rr.ToList();
现在使用List上的Count
属性,然后调用First()
if (rrList.Count() != 0) // use the List rrList
{
txt_jtitle.Text = rr.First().j_title;
txtissn_p.Text = rr.First().issn_p;
}
答案 1 :(得分: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)