Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Linq To Sql以IQueryable<T>形式从函数返回

Linq To Sql以IQueryable<T>形式从函数返回
EN

Stack Overflow用户
提问于 2009-01-20 03:03:22
回答 4查看 27.4K关注 0票数 5

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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和filename。这是我在linq语句中返回的项。

我将我的语句修改为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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;
}
EN

回答 4

Stack Overflow用户

发布于 2009-01-20 03:06:41

你的意思是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select new MyObject { TicketId = tickets.ticket_id,
     Title = tickets.title, ...};

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

这是一个“对象初始化器”,它创建一个新的MyObject (每条记录),并从源数据中分配属性。你得到的是一个“匿名类型”初始值设定项,这是不一样的。注意,如果你有一个非默认的构造函数,你也可以使用类似这样的东西:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select new MyObject(tickets.ticket_id, tickets.title);

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

这将是IQueryable<MyObject>;您不需要调用.AsQueryable()。注与非类型化的IQueryable相比,函数返回类型化的表单(IQueryable<MyObject>)会更好。

票数 14
EN

Stack Overflow用户

发布于 2009-01-20 03:22:10

此行的语法不正确:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return ticketDetails.AsQueryable()<myObject>;

并且应该阅读

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
return ticketDetails.AsQueryable<myObject>();

此外,您正在使用select new {创建匿名对象,但是您希望创建myObject实例。正确的实现应该如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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, ...语法创建一个SomeClass实例并将属性设置为给定值。或者,您可以在myObject类上实现一个构造函数,并使用select new myObject(...)在LINQ语句中调用它。

票数 8
EN

Stack Overflow用户

发布于 2009-01-20 03:14:24

正如Marc所说,当您的查询运行时,您不是在构造myObject实例。但除此之外,您不需要将其强制转换为IQueryable<T>,除非显式强制转换为IEnumerable<T>,否则LINQ select语句将返回IQueryable<T>

此外,在尝试访问返回的数据之前,请注意DataContext尚未被处理。但是我注意到你的上下文不是在方法中构造的,注意不要让DataContext保持太长时间,它是一个工作单元对象,并不意味着要长时间保持打开。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/460831

复制
相关文章
.NET面试题系列[14] - LINQ to SQL与IQueryable
"理解IQueryable的最简单方式就是,把它看作一个查询,在执行的时候,将会生成结果序列。" - Jon Skeet
s055523
2018/09/14
1.7K0
.NET面试题系列[14] - LINQ to SQL与IQueryable
.NET中数据访问方式(一):LINQ
语言集成查询(Language-Integrated Query),简称LINQ,.NET中的LINQ体系如下图所示:
雪飞鸿
2018/09/05
2.7K0
.NET中数据访问方式(一):LINQ
.NET3.5新特性,Lambda表达式
【原文地址】New “Orcas” Language Feature: Lambda Expressions 【原文发表日期】 Sunday, April 08, 2007 4:21 PM 上个月我开始了一个贴子系列,讨论作为Visual Studio和.NET框架Orcas版本一部分发布的一些新的VB和C#语言特性。下面是这个系列的前2篇贴子: 自动属性,对象初始化器,和集合初始化器 扩展方法 今天的贴子讨论另一个基础性的新语言特性:Lambda表达式。 什么是Lambda表达式? 随VS 2005
菩提树下的杨过
2018/01/22
1.8K0
.NET3.5新特性,Lambda表达式
nodejs+koa以流的形式返回数据
需求背景: 项目中有多处下载数据的地方,有时候遇到几百万条数据,一口气返回的话,可能会导致内存不够用。
黒之染
2021/02/05
3.5K0
IEnumerable<T>和IQueryable<T>区分
LINQ查询方法一共提供了两种扩展方法,在System.Linq命名空间下,有两个静态类:Enumerable类,它针对继承了IEnumerable<T>接口的集合进行扩展;Queryable类,针对继承了IQueryable<T>接口的集合进行扩展。我们会发现接口IQueryable<T>实际也是继承了IEnumerable<T>接口的,既然这样微软为什么要设计出两套扩展方法呢?
CherishTheYouth
2019/09/11
9270
IEnumerable<T>和IQueryable<T>区分
.NET面试题系列[15] - LINQ:性能
当你使用LINQ to SQL时,请使用工具(比如LINQPad)查看系统生成的SQL语句,这会帮你发现问题可能发生在何处。
s055523
2018/09/14
2.6K0
.NET面试题系列[15] - LINQ:性能
编写高质量代码改善C#程序的157个建议[IEnumerable<T>和IQueryable<T>、LINQ避免迭代、LINQ替代迭代]
本文已更新至http://www.cnblogs.com/aehyok/p/3624579.html 。本文主要学习记录以下内容:
aehyok
2018/08/31
9650
编写高质量代码改善C#程序的157个建议[IEnumerable<T>和IQueryable<T>、LINQ避免迭代、LINQ替代迭代]
查询字典码,并且以值的形式进行返回
在加入到数据库的时候,对应的字段是代码编号,但是查询的时候,我们要展示,不能只是展示编号,要展示的是编号对应的具体的值,所以,我们需要在xml里面进行套语句。也就是在查询语句里面套
一写代码就开心
2020/11/20
1.5K0
C#3.0新增功能09 LINQ 基础02 LINQ 查询简介
查询 是一种从数据源检索数据的表达式。 查询通常用专门的查询语言来表示。 随着时间的推移,人们已经为各种数据源开发了不同的语言;例如,用于关系数据库的 SQL 和用于 XML 的 XQuery。 因此,开发人员对于他们必须支持的每种数据源或数据格式,都不得不学习一种新的查询语言。 LINQ 通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况。 在 LINQ 查询中,始终会用到对象。 可以使用相同的基本编码模式来查询和转换 XML 文档、SQL 数据库、ADO.NET 数据集、.NET 集合中的数据以及 LINQ 提供程序可用的任何其他格式的数据。
张传宁IT讲堂
2019/09/17
3.5K0
C#3.0新增功能09 LINQ  基础02 LINQ 查询简介
.NET深入解析LINQ框架(二:LINQ优雅的前奏)
例子说明:假设我有一个表示学生的对象类型还有一个表示学生集合的类型。学生集合类型主要就是用来容纳学生实体,集合类型提供一系列的方法可以对这个集合进行连续的操作,很常用的就是筛选操作。比如筛选出所有性别是女生的学生,然后再在所有已经筛选出来的女性学生的集合当中筛选出年龄大于20周岁的学生列表,再继续筛选来自江苏南京地区的学生列表等等这一系列的连贯操作。这样的处理方式我想是LINQ最为常见的,毕竟LINQ是为了查询而生,而查询主要就是面向集合类的数据。
王清培
2019/03/01
2.1K0
.NET深入解析LINQ框架(二:LINQ优雅的前奏)
Entity Framework 的一些性能建议
这是一篇我在2012年写的老文章,至今适用(没错,我说的就是适用于EF Core)。因此使用微信重新推送,希望能帮到大家。
Edi Wang
2019/07/09
1.7K0
Entity Framework 的一些性能建议
C#规范整理·集合和Linq
LINQ(Language Integrated Query,语言集成查询)提供了类似于SQL的语法,能对集合进行遍历、筛选和投影。一旦掌握了LINQ,你就会发现在开发中再也离不开它。
郑子铭
2023/08/30
2380
C#规范整理·集合和Linq
.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)
这个主题扯的可能有点远,但是它关系着整个LINQ框架的设计结构,至少在我还没有搞懂LINQ的本意之前,在我脑海里一直频频出现这样的模型,这些模型帮助我理解LINQ的设计原理。其实在最早接触环路模型和碎片化模型是在前两个月,那个时候有幸接触企业应用架构方面的知识,里面就有很多业务碎片化的设计技巧。其实理解这些所谓的设计模型后将大大开阔我们的眼界,毕竟研究框架是要研究它的设计原理,它的存在必然是为了解决某一类问题,问题驱动它的设计模型。所以我们在研究这样的模型的时候其实已经在不知不觉的理解问题的本质。
王清培
2019/03/01
1.1K0
.NET深入解析LINQ框架(五:IQueryable、IQueryProvider接口详解)
LINQ to SQL集成到应用程序中需考虑的一些问题
1、LINQ to SQL集成到应用程序中需考虑的一个问题, 到底应该返回IQueryable<T>还是IQueryable? 或许这个列表还应该继续扩展为T, List<T>, 对于Business
张善友
2018/01/19
1.2K0
Vue中data为何以函数形式返回
在使用Vue构建组件化应用时,每个组件的data属性都是以函数形式返回的,这主要是在组件化实现的时候,每个实例可以维护一份被返回对象的独立的拷贝,而不是共享同一个对象的引用。
WindRunnerMax
2020/08/27
9000
了解LINQ
实际上,能够被foreach的对象,一定是实现了带有返回值的IEnumerator的GetEnumerator()方法的接口,而.NET内置的该接口则是IEnumerable,一般指的是IEnumerable泛型接口,让我们来看看IEnumerator接口有啥成员:
ryzenWzd
2021/12/14
9030
Entity Framework快速入门--IQueryable与IEnumberable的区别
公开枚举器,该枚举器支持在指定类型的集合上进行简单迭代。也就是说:实现了此接口的object,就可以直接使用foreach遍历此object;
老马
2022/05/10
4510
Entity Framework快速入门--IQueryable与IEnumberable的区别
.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
在开始看本篇文章之前先允许我打断一下各位的兴致。其实这篇文章本来是没有打算加“开篇介绍”这一小节的,后来想想还是有必要反馈一下读者的意见。经过前三篇文章的详细讲解,我们基本上对LINQ框架的构成原理有了一个根本的认识,包括对它的设计模型、对象的模型等,知道LINQ的查询表达式其实是C#之上的语法糖,不过这个糖确实不错,很方便很及时,又对一系列的LINQ支撑原理进行了大片理论的介绍,不知道效果如何;
王清培
2019/03/01
1.5K0
.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
090706 T Linq 的认识
/// <summary> /// 一个不错的Linq问题 /// </summary> private void LinqQuestion() {     JZDataContext db = new JZDataContext();     TextWriter log = new StringWriter();     db.Log = log;     IEnumerable<A_User> table = db.A_Users;     var q2 = table.Where(u => u.
用户1172223
2018/01/26
4960
T4生成整理
将一些公用的东西弄到一个类库DM.T4里面,哪个项目需要用到t4生成的话,将DM.T4的生成事件中将dll和ModelAuto.ttinclude复制到需要使用T4的项目的生成目录下,如果这样
冰封一夏
2019/09/11
8650

相似问题

是否只从Linq to Sql或Linq to Entities类返回IQueryable<T>?

20

如果IQueryable<T>继承了IEnumerable<T>,为什么IQueryable<T>是LINQ to SQL?

20

返回IQueryable<T>或不返回IQueryable<T>

30

如何将LINQ IQueryable<T>传递(并返回)给函数?

20

以数组形式从函数返回SQL结果

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文