加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

.net – 如何使用LINQ创建IQueryable类型的匿名对象

发布时间:2020-12-16 09:58:04 所属栏目:asp.Net 来源:网络整理
导读:我正在一个ASP.NET MVC项目中工作,我创建了两个 LinqToSQL类.我还为模型创建了一个存储库类,我在该类中实现了一些方法,如LIST,ADD,SAVE,它为控制器提供数据.现在在其中一个存储库类中,我已经使用这样的LINQ连接提取了一些数据. private HerculesCompanyDataC
我正在一个ASP.NET MVC项目中工作,我创建了两个 LinqToSQL类.我还为模型创建了一个存储库类,我在该类中实现了一些方法,如LIST,ADD,SAVE,它为控制器提供数据.现在在其中一个存储库类中,我已经使用这样的LINQ连接提取了一些数据.

private HerculesCompanyDataContext Company = new HerculesCompanyDataContext();
private HerculesMainDataContext MasterData = new HerculesMainDataContext();
public IQueryable TRFLIST()
{
var info = from trfTable in Company.TRFs
       join exusrTable in MasterData.ex_users on trfTable.P_ID equals exusrTable.EXUSER
       select new 
           {
               trfTable.REQ_NO,trfTable.REQ_DATE,exusrTable.USER_NAME,exusrTable.USER_LNAME,trfTable.FROM_DT,trfTable.TO_DT,trfTable.DESTN,trfTable.TRAIN,trfTable.CAR,trfTable.AIRPLANE,trfTable.TAXI,trfTable.TPURPOSE,trfTable.STAT,trfTable.ROUTING
           };
    return info;
}

现在,当我从我的控制器调用此方法时,我无法获得列表.我想知道的是,如果不创建自定义数据模型类,我如何返回像IQueryable这样的匿名类型的对象.并且因为这不属于任何一个数据模型,所以如何在视图中引用此列表.

解决方法

您不能返回“匿名类型”的对象.请参阅 this previous post of mine,解决这种情况,似乎匿名类型将允许我们在强类型上作弊,但他们没有.

是的,从灵活类型(如DataTables)转变为强类型对象是解决方案策略的重要组成部分.使用LINQ-To-SQL,您应该能够非常轻松地返回强类型实体对象.您的存储库方法需要返回特定类型的IQueryable接口,如IQueryable< TRF>,而不仅仅是IQueryable.或者,存储库方法只能返回单个TRF实体对象或这些对象的列表.

请记住,匿名类型和隐式类型变量是两个非常不同的东西.在后台由编译器为您创建匿名类型.在这种情况下,不要像在示例LINQ查询中那样将数据放入匿名类型.假设您的实体是trfTable,请尝试以下方法:

public IQueryable<trfTable> TRFLIST()
{
    var info = from trfTable in Company.TRFs
        join exusrTable in MasterData.ex_users on trfTable.P_ID equals exusrTable.EXUSER
        select new trfTable
    return info;
}

这样做的好处是它可以充分利用IQueryable的本质,因为在存储库外添加的标准实际上会添加到生成的查询中.这很酷.但是,there is some good debate关于这是否是最佳方式.

请注意,此处的信息由编译器隐式输入,但它不是匿名类型.这是一个IQuerable< trfTable>.这是关键的区别.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读