Linq To Sql return from function as IQueryable<T>
好吧,我已经设法让下面的工作
1 2 3 4 5 6 7 8 9 | public IQueryable getTicketInformation(int ticketID) { var ticketDetails = 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 { tickets.ticket_id, tickets.title, tickets.care_of_email, file.filename }; return ticketDetails.AsQueryable(); } |
我接着创建了自己的类(myObject),其中包含原语票据ID、标题、注意事项电子邮件和文件名。这是我在LINQ声明中返回的项目。
我把我的陈述修改成
1 2 3 4 5 6 7 8 9 | public IQueryable<myObject> getTicketInformation(int ticketID) { var ticketDetails = 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 { tickets.ticket_id, tickets.title, tickets.care_of_email, file.filename }; return ticketDetails.AsQueryable()<myObject>; } |
我认为这会使它在使用泛型时安全,但我得到了错误"无法将方法组"asqueryable"转换为非委托类型"system.linq.iqueryable"。"是否要调用该方法?"
我想做的事情是否可能?
MyObject类是否需要实现IEnumerable或IQueryable?
或者最好从Linq结果集构造对象MyObject,然后从对象MyObject函数返回
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public myObject getTicketInformation(int ticketID) { ....linq statement.... myObject o = null; foreach (obj in linqstatemt) { o = new myObject(); o.ticket_id = obj.ticket_id ....... } return o; } |
你的意思是:
1 2 |
(注:我的名字是更tweaked稍大的C - idiomatic #)
这是一个"面向对象initializer",creates
1 |
其中使用的规定的构造,通过在提供给从源数据的价值。
这将是
这条线是不正确的:syntactically
1 | return ticketDetails.AsQueryable()<myObject>; |
和应该读
1 | return ticketDetails.AsQueryable<myObject>(); |
同时,你创造的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 }; } |
一个语法的
作为马克指出你不当的情况下构建的
同时,要仔细,你的datacontext hasn已在你的disposed的尝试和访问的数据被返回。但我注意到你的背景是不在方法的建成,是仔细的,你不是一个datacontext为维持太长,这是一个面向对象的工作单位和不打算长时间为periods保持开放。
gents, 这一切的意义是只要你只returning单表,但如果有两个或更多的大的返回???
1 2 3 4 5 |