PDA

View Full Version : خطای The query results cannot be enumerated more than once



alef.divar
دوشنبه 17 شهریور 1393, 18:08 عصر
سلام
من کد زیر رو نوشتم:

if (txtCaptcha.Text.ToString().Trim() == Session["code"].ToString().Trim())
{
var result = db.LoginUser(txtUserName.Text.Trim(), txtPass.Text);
if (result.Count() != 0)
{
foreach (LoginUserResult item in result)
{
Session.Add("IdUser", item.Usr_id.ToString());
}
Response.Redirect("~/Default.aspx");
}
else
{
lblResualt.Text = "<b style=\"background-color:red;\">چنین کاربری وجود ندارد</b>";
}
}
else
{
lblResualt.Text = "<b style=\"background-color:red;\">کد امنیتی را درست وارد کنید</b>";
}

و مشکلم اینه که در خط

foreach (LoginUserResult item in result)

خطا گرفته میشه که The query results cannot be enumerated more than once.
مشکل چیه لطفا راهنمایی کنید.

parvizwpf
دوشنبه 17 شهریور 1393, 18:25 عصر
شاید result داره فقط یک آیتم برمیگردونه. خب حق داره. خروجیش ار چه نوعیه؟

alef.divar
دوشنبه 17 شهریور 1393, 19:54 عصر
شاید result داره فقط یک آیتم برمیگردونه. خب حق داره. خروجیش ار چه نوعیه؟
دوست من db در واقع یک شی از کلاس DataContext است. من دارم از تکنولوژی Linq to SQL استفاده میکنم که اولین بارمه و یه خورده گیر دارم.
LoginUser هم یه stored procuder است که براساس نام کاربری و رمز عبور یه select رو بانک میزنه.

در رابطه با نوع بازگشتی که توی result ریخته میشه باید بگم که ISingleResult است که نمیدونم چور میشه سطرهاشو خوند. برای همین توی یه متغییر var ریختمش. حالا نمیدونم باد چی کار کنم به راهنمایی تون احتیاج دارم.
ممنونم

a_true_2004
سه شنبه 15 دی 1394, 14:25 عصر
سلام.
در ابتدای شروع حلقه، این خط رو جایگزین کنید:


foreach(LoginUserResult item in result.ToList())

به علت اینکه Entity Framework خروجی اجرای دستور شما رو از یک Stored Procedure میگیره، بیش از یکبار این خروجی قابل دسترسی نیست.
با تغییری که در حلقه FOR انجام میدید، تمام خروجی به صورت List در دسترس حلقه FOR قرار می گیره.