Linq К Sql возвращаются из функции как IQueryable <T>

Я бы использовал guava для этого:

    String t = " 111     11 ";
    Splitter.on(Pattern.compile("\\s+"))
            .omitEmptyStrings()
            .split(t)
            .forEach(System.out::println);
5
задан David Schmitt 20 January 2009 в 11:22
поделиться

3 ответа

Вы имеете в виду:

select new MyObject { TicketId = tickets.ticket_id,
     Title = tickets.title, ...};

(обратите внимание, что я настроил имена немного, чтобы быть большим количеством C#-idiomatic),

Это - "объектный инициализатор", который создает новое MyObject (на запись), и присваивает свойства от исходных данных. То, что Вы имели, было "анонимным типом" инициализатор, который не является тем же. Обратите внимание, что, если у Вас есть конструктор не по умолчанию, Вы могли бы также использовать что-то как:

select new MyObject(tickets.ticket_id, tickets.title);

который использует указанного конструктора, передающего в предоставленных значениях от исходных данных.

Это затем будет IQueryable<MyObject>; Вы не должны звонить .AsQueryable(). Обратите внимание, что для Вашей функции было бы лучше возвратить введенную форму (IQueryable<MyObject>) чем невведенный IQueryable.

14
ответ дан 18 December 2019 в 06:23
поделиться

Эта строка является синтаксически неправильной:

return ticketDetails.AsQueryable()<myObject>;

и должен читать

return ticketDetails.AsQueryable<myObject>();

Кроме того, Вы создаете анонимные объекты с select new {, но Вы хотите создать myObject экземпляры. Корректная реализация была бы похожа на это:

public IQueryable<myObject> getTicketInformation(int ticketID)
{

    return from tickets in _context.tickets
        join file in _context.file_objects on tickets.ticket_id equals file.source_id
        where tickets.ticket_id == ticketID
        select new myObject() { 
            ticket_id = tickets.ticket_id,
            title = tickets.title, 
            care_of_email = tickets.care_of_email, 
            filename = file.filename
        };

}

new SomeClass() { Property = value, ... синтаксис создает a SomeClass экземпляр и наборы свойства к данным значениям. Кроме того, Вы могли реализовать конструктора на myObject класс и вызов это в linq операторе с select new myObject(...).

8
ответ дан 18 December 2019 в 06:23
поделиться

Поскольку Marc заявил, что Вы не создаете экземпляры myObject когда Ваш запрос выполняется. Но дополнительно Вы не должны бросать его к IQueryable<T>, statment выбора LINQ возвратится IQueryable<T> если бросок explicity к IEnumerable<T>.

Кроме того, будьте осторожны, что от Вашего DataContext не избавились, прежде чем Вы попытаетесь получить доступ к возвращаемым данным. Но я заметил, что Ваш контекст не создается в методе, быть осторожным, что Вы не поддерживаете DataContext слишком долго, это - объект единицы работы и не предназначенное, чтобы быть сохраненным открытым в течение долгих промежутков времени.

2
ответ дан 18 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

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