Сообщение об ошибке LINQ to SQL: «Где» не найдено - PullRequest
0 голосов
/ 15 октября 2008

Я пытаюсь начать использовать LINQ и, в частности, LINQ to SQL, но у меня возникают некоторые трудности

Я пробовал это с SqlMetal и теперь использую конструктор таблиц базы данных в Visual Studio, и я продолжаю получать подобные ошибки, как в этом коде, используя контекст данных, который я создал с помощью дизайнера макетов базы данных в VS2008.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        string usn = UserNameBox.Text;
        string pss = PassBox.Text;

        if (usn == "" || pss == "")
            return;

        DataClassesDataContext dc = new DataClassesDataContext();
        var user = from u in User
                   where u.UserName == usn
                   select u;

    }
}
}

Я получаю сообщение об ошибке, где говорится: «Не удалось найти реализацию шаблона запроса для типа источника« System.Security.Principal.IPrincipal ». А также: «Где» не найдено.

У меня было нечто похожее на это, когда я пытался использовать результаты SqlMetal. Я удалил этот источник и начал заново, используя дизайнер. Я, должно быть, что-то здесь упускаю, но я не могу понять, что. Разве таблицы не должны реализовывать то, что мне нужно, так как я использую LINQ to SQL, или мне нужно сделать что-то дополнительное, чтобы это произошло?

Ответы [ 5 ]

10 голосов
/ 15 октября 2008

Попробуйте изменить User на dc.User:

var user = from u in dc.User
                   where u.UserName == usn
                   select u;

User является свойством System.Web.UI.Page.User .

7 голосов
/ 15 октября 2008

Попробуйте

var user = from u in dc.User
                   where u.UserName == usn
                   select u;
2 голосов
/ 15 октября 2008

Ваше выражение запроса должно использовать dc.User, а не просто User:

DataClassesDataContext dc = new DataClassesDataContext();
var user = from u in dc.User
           where u.UserName == usn
           select u;

Если у вас включено множественное число, это может быть dc.Users.

2 голосов
/ 15 октября 2008

Разве вы не должны использовать постоянный ток, который вы создали где-то в своем запросе?

Что-то вроде:

protected void Page_Load(object sender, EventArgs e) 
{ 
  if (Page.IsPostBack) 
  {
    string usn = UserNameBox.Text; 
    string pss = PassBox.Text; 
    if (usn == "" || pss == "")            
      return; 
    DataClassesDataContext dc = new DataClassesDataContext(); 
    var user = from u in dc.User where u.UserName == usn select u; 
  } 
}
0 голосов
/ 15 октября 2008

Пользователь, на которого вы ссылаетесь (если вы не используете dc.User), является участником Page.User. Вот почему intellisense не жалуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...