Не удалось найти реализацию шаблона запроса для типа источника "System.Data.Entity.DbSet"
Я использую Entity Framework в первый раз, но кажется, что он работает не так, как ожидалось.
У меня есть этот код:
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
public static class QueryClass
{
public static void Query()
{
using (var context = new MyDbEntities())
{
DbSet<MyTable> set = context.Tables;
var query = from val in set select value;
}
}
}
В строке запроса (точно "заданная" переменная подчеркнута красным цветом) Я получаю ошибку:
Не удалось найти реализацию шаблона запроса для типа источника 'System.Data.Entity.DbSet'. 'Select' не найден. Отсутствует ссылка или директива using для "System.Linq"
MyDbEntities
автоматически генерируется Entity Framework в подходе Database-First, context.Tables
является DbSet
, поэтому он должен иметь возможность использовать Linq, который был добавлен через директиву using
. Во избежание недоразумений в этом классе я нахожу следующее:
public virtual DbSet<MyTable> Tables { get; set; }
Что мне не хватает, чтобы сделать работу select
?
Спасибо.
Ответы
Ответ 1
вам нужно будет добавить ссылку на System.Data.Linq
System.Data.Linq специфичен для LINQ-SQL (DataContext и т.д.)
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.Linq;
using System.Linq;
public static class QueryClass
{
public static void Query()
{
using (var context = new MyDbEntities())
{
IQueryable<MyTable> qTable= from t in context.Tables
select t; // can you confirm if your context has Tables or MyTables?
Console.WriteLine("Table Names:");
foreach (var t in qTable)
{
Console.WriteLine(t.Name);//put the relevant property instead of Name
}
}
}
}
Ответ 2
Просто добавил ссылку using System.Linq;
и работал нормально, как уже упоминалось выше.