Извлечение одного объекта с помощью метода GetTable через DataContext - PullRequest
2 голосов
/ 03 февраля 2010

У меня есть класс, унаследованный от DataContext для использования Linq.

public class Context : DataContext
{
    public Context(string connectionString)
        : base(connectionString)
    {
    }
}


[Table(Name = "TableNameee")]
public class ClassOfTable
{

}

И у меня есть другой класс, который сопоставлен с таблицей. Я использую

context.GetTable<ClassOfTable>()

метод для извлечения всех строк таблицы, которые сопоставлены с классом ClassOfTable. Но я хочу получить только одну строку из таблицы базы данных. Я могу использовать это так:

ClassOfTable cls = context.GetTable<ClassOfTable>().Where(p=>p.id==1).First();

Но это будет извлекать все строки таблицы. И я не хочу этого делать. Что я должен сделать, чтобы взять только одну строку из таблицы?

Ответы [ 2 ]

2 голосов
/ 03 февраля 2010

Он не получит все строки таблицы, он просто получит 1 строку с помощью оператора where в SQL. Помните, что Linq - это модель отложенного исполнения , GetTable<T> на самом деле ничего не запускает, только когда .First() run вызывает что-либо.

Мы добавляем этот метод в наш DataContext, чтобы делать это часто, вот он в форме расширения:

public static T GetById<T>(this DataContext dc, long id) where T : class, IBaseEntity
{
  return dc.GetTable<T>().Single(t => t.Id == id);
}

Наш интерфейс, который есть в каждом классе, может быть очень маленьким для этой цели:

public interface IBaseEntity
{
    long Id { get; set; }
}
0 голосов
/ 03 февраля 2010

Нет, не будет. Я знаю, что, похоже, так и будет, но linq2sql на самом деле работает с необходимым «наиболее эффективным» SQL. Вы можете попробовать и проверить выданные запросы, используя профилировщик.

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