Сообщение об ошибке LINQ to SQL: «Где» не найдено

Я пытаюсь начать использовать 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, или мне нужно сделать что-то дополнительное, чтобы это произошло?

c#,linq,linq-to-sql,

0

Ответов: 5


7 принят

Пытаться

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

10

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

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

Это Userсвойство System.Web.UI.Page.User .


2

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

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

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; 
  } 
}

2

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

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

Если вы включили плюрализацию, это могут быть dc.Users.


0

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

C #, LINQ, LINQ к SQL,
Похожие вопросы