gpt4 book ai didi

c# - Linq To Sql 从函数返回为 IQueryable

转载 作者:太空狗 更新时间:2023-10-29 22:04:23 25 4
gpt4 key购买 nike

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

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、title、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’转换为非委托(delegate)类型‘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 更好。 .

关于c# - Linq To Sql 从函数返回为 IQueryable<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/460831/

25 4 0