LINQ к SQL - Как выбрать определенные столбцы и возвратить список со строгим контролем типов

Использование регулярных выражений будет быстрее

    function checkIsExcel(file) {
        if ((!/.*\.xlsx$/.test(file.name)) && (!/.*\.xls$/.test(file.name)) && (!/.*\.csv$/.test(file.name))) {
            return false;
        }
        return true;
    }
41
задан Mehrdad Afshari 7 July 2009 в 21:52
поделиться

2 ответа

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

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new Person { Name = a.Name, Age = a.Age }).ToList();

Очевидно, Класс Person - это ваш класс сущностей, созданный LINQ to SQL. Вы должны создать свой собственный класс, если вам нужны только некоторые из столбцов:

class PersonInformation {
   public string Name {get;set;}
   public int Age {get;set;}
}

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new PersonInformation { Name = a.Name, Age = a.Age }).ToList();

Вы можете свободно поменять местами var на List здесь, ничего не затрагивая (так как это то, что компилятор делает).

В противном случае, если вы работаете с запросом локально, я предлагаю рассмотреть анонимный тип:

var result = (from a in new DataContext().Persons
              where a.Age > 18
              select new { a.Name, a.Age }).ToList();

Обратите внимание, что во всех этих случаях , результат статически типизирован (его тип известен во время компиляции). Последний тип - это List анонимного класса, созданного компилятором, аналогичный классу PersonInformation , который я написал выше. Начиная с C # 3.0, в языке нет динамической типизации.

ОБНОВЛЕНИЕ:

Если вы действительно хотите вернуть List (что может быть, а может и не быть лучшим вариантом ), вы можете сделать это:

var result = from a in new DataContext().Persons
             where a.Age > 18
             select new { a.Name, a.Age };

List<Person> list = result.AsEnumerable()
                          .Select(o => new Person {
                                           Name = o.Name, 
                                           Age = o.Age
                          }).ToList();

Вы также можете объединить приведенные выше утверждения, но я разделил их для ясности.

81
ответ дан 27 November 2019 в 00:30
поделиться

The issue was in fact that one of the properties was a relation to another table. I changed my LINQ query so that it could get the same data from a different method without needing to load the entire table.

Thank you all for your help!

3
ответ дан 27 November 2019 в 00:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: