Linq To Sql 从函数返回 IQueryable

2023-12-09

好的,我已经成功地完成了以下工作

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) Ticket_id、标题、care_of_email 和文件名。哪些是我在 linq 语句中返回的项目。

我将我的声明修改为

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

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;
}

你的意思是:

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

(请注意,我稍微调整了名称以使其更符合 C# 惯用语)

这是一个创建新对象的“对象初始值设定项”MyObject(每条记录)并分配源数据的属性。您拥有的是“匿名类型”初始值设定项,这是不一样的。请注意,如果您有非默认构造函数,您还可以使用类似以下内容的内容:

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

它使用指定的构造函数,传入源数据中提供的值。

这将是IQueryable<MyObject>;你不需要打电话.AsQueryable()。请注意,您的函数最好返回键入的形式(IQueryable<MyObject>)比无类型的IQueryable.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linq To Sql 从函数返回 IQueryable 的相关文章

随机推荐