当前位置:  开发笔记 > 编程语言 > 正文

如何在LINQ中为结果集创建返回类型

如何解决《如何在LINQ中为结果集创建返回类型》经验,为你挑选了1个好方法。

我有一个问题,确定c#和LINQ如何解决处理数据结构的常见问题,该数据结构不一定返回表结构,而是结果集.

我有一个有效的存储过程,并将其包含在我的DBML中

[Function(Name="dbo.p_GetObject")]
public int p_GetObject([Parameter(Name="ObjectType", DbType="NVarChar(200)")] string objectType, [Parameter(Name="ItemState", DbType="Bit")] System.Nullable itemState, [Parameter(Name="IsPublished", DbType="Bit")] System.Nullable isPublished)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), objectType, itemState, isPublished);
    return ((int)(result.ReturnValue));
}

dbml表示返回类型为(None),这可能是关键问题.但是,我没有与结果集匹配的DBML对象.

SP采用三个参数,并返回一个包含三列(ID,Name,Value)和多行的结果集.我可以为此创建一个数据对象,并将其命名为resultSet

当我为此编写函数调用时,我会陷入困境:

public List GetObject(string objectType, bool itemState, bool isPublished)
{
    MyDataContext.p_GetObject(objectType, itemState, isPublished);
}

我的问题是:

如何对存储过程进行数据上下文调用以填充我的resultSet对象?有更好的方法吗?返回类型应该是什么?一个SQL视图?寻找好的建议......



1> Marc Gravell..:

如果它只是不了解您的SP,那可能是SET FMT_ONLY问题...尝试从SP的简化版本生成数据?

通常,未与现有实体进行1:1映射的SP/UDF将以生成的类型公开自身.您可以在DBML文件中重命名(不在设计器中),但我个人不会; 我倾向于将SP标记为私有,并编写我自己的方法,将其投影到我自己的POCO类型(为存储库定义):

var typed = from row in cxt.SomeFunction(123)
            select new MyType {Id = row.Id, Name = row.Name, ...}

这样做的部分原因在于存储库的纯度,部分是为了防止设计者以意想不到的方式重写DBML的习惯;-p请参阅此处了解更多信息.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有