2010-07-23 2 views
0
NorthwindDataContext db = new NorthwindDataContext(); 
List<Category> lresult = (db.Categories 
     .Select(p => new { p.CategoryID, p.CategoryName, p.Description })).ToList(); 

В приведенном выше запросе я не хочу использовать вар вместо вара я хочу использовать список <> но покажите мне ошибку .Why ошибок происходят, как исправить этот запрос.Linq List <> Проблема

+0

Есть ли конкретная причина, почему вы не хотите использовать 'var'? Это идеальный вариант использования. –

ответ

1

Вы создаете список объектов анонимного типа. Невозможно статически объявить список, который принимает анонимные объекты (кроме List<object>).

Единственным решением было бы указать конкретный тип в вашем заявлении Select:

List<MyType> lresult = db.Categories 
         .Select(p => new MyType() { /* assignments here */ }) 
         .ToList(); 

мне было бы интересно узнать, почему вы не хотите использовать var хотя. На самом деле это идеальный вариант использования.

2

Ваш запрос подбирает анонимный тип, а не экземпляры Category. Вот почему вы собираетесь нужно либо:

  1. Используйте вар вместо List<>
  2. Создание именованного типа вместо того, чтобы использовать анонимный тип в запросе.

типов Анонимных невыразимого - нет имени типа, которое вы можете обратиться к ним в коде. Они существуют, чтобы упростить создание прогнозов в запросах LINQ без необходимости писать явный тип для каждого результата.

В вашем случае нет реального недостатка, чтобы использовать var. Вот почему он существует. Он позволяет ссылаться на анонимные типы, не указывая им имени (поскольку вы не можете). Я бы просто использовал:

var lresult = (db.Categories.Select(... // your query... 
+0

вы избили меня до этого :). –

+0

Я изучаю LINQ и столкнулся с проблемой. Я создал простой запрос против db northwind, и я формирую поля, которые должны быть возвращены. Проблема в том, что после результата привязки с Aspxgridview я не могу отредактировать оператор show, я не могу изменить Проблема обновления результатов LINQ с анонимным типом ... только для чтения – shamim

0

Я уверен, что причина этого в том, что вы выбираете анонимный тип. Вам нужно будет выбрать категорию или создать другой класс, который будет хранить данные.

Вариант 1:

NorthwindDataContext db = new NorthwindDataContext(); 
List<Category> result = (from cat in db.Categories 
         select cat).ToList(); 

Вариант 2:

public class NewCat 
{ 
    public int CategoryId, 
    public string CategoryName, 
    public string Description 
} 

NorthwindDataContext db = new NorthwindDataContext(); 
List<NewCat> result = (from cat in db.Categories 
         select new NewCat() 
         { 
          CategoryId = cat.CategoryID, 
          CategoryName = cat.CategoryName, 
          Description = cat.Description 
         }).ToList(); 
0

Чтобы заставить его работать с List<Category> вам нужно будет явно указать его, чтобы выбрать элемент категории.

Как так

List<Category> lresult = (from p in db.Categories select new Category { 
           CategoryID = p.CategoryId, 
           CategoryName = p.CategoryName, 
           Description = p.Description }).ToList(); 
Смежные вопросы