【问题标题】:Using LINQ calling a sproc, how can I pass a var back from a method?使用 LINQ 调用 sproc,如何从方法传回 var?
【发布时间】:2010-08-27 13:43:55
【问题描述】:

我有这个方法用了一段时间

public string getSlotText(int slotID)
{
    DataClasses1DataContext context = new DataClasses1DataContext();

    var slotString = context.spGetSlotTextBySlotID(slotID);

    return slotString.ElementAt(0).slotText;

}

但我现在真正想要的是类似

public var getSlotText(int slotID)
{
    DataClasses1DataContext context = new DataClasses1DataContext();

    var slotString = context.spGetSlotTextBySlotID(slotID);

    return slotString;
}

因为 slotString 中有多个元素。我看到了一些其他示例,但没有一个使用 LINQ 调用存储过程。

任何帮助都会很棒,非常感谢。

非常感谢

提姆

【问题讨论】:

    标签: c# linq linq-to-sql stored-procedures output-parameter


    【解决方案1】:

    var 关键字不允许作为返回类型。它只能在初始化的方法和类成员中使用。

    虽然有可能对返回类型进行类型推断,这会违反 C# 中的其他一些内容。例如匿名类型。由于 C# 中的方法不能返回匿名类型,因此您需要再次检查您不能返回匿名类型,而不仅仅是禁止将 var 关键字作为返回类型。

    此外,允许 var 作为返回类型会使方法签名在更改实现时不太稳定。

    编辑:您希望返回什么有点不清楚,但这里有一些标准解决方案:

    如果你想从结果中返回所有slotText

    return context.spGetSlotTextBySlotID(slotID).Select(s=> s.slotText).ToList());
    

    (将返回List<string>

    或者,如果您想返回所有 SlotText(或从存储过程返回的任何类型)

    return context.spGetSlotTextBySlotID(slotID).Select(s=> s.slotText).ToList());
    

    (将返回List<SlotText>

    【讨论】:

    • 嗨,阿尔宾,感谢您的回复。我基本上想做这样的事情我基本上想在一个通过链接调用存储过程的类中创建一个方法,然后在一个单独的页面中调用该方法,以便它返回一个对象,然后我可以将值取出并显示它们我的页面。 someType myVar WebApplication1.getSlotText(1) textbox1.text = myVar.slotTitle.toString(); textbox2.Text = myVar.slotText.toString(); textbox3.Text = myVar.slotUrl.toString();我会查看您的答案,但我想我会在此期间发布。再次感谢
    • @Tim:你能用这些信息编辑你的问题吗?您还应该澄清您是否想要一个具有不同属性的对象或多个具有单个属性的对象或多个具有许多属性的对象。您可以发布返回值的预期内容的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-07
    • 2017-09-28
    • 1970-01-01
    • 2019-09-29
    • 2011-09-26
    相关资源
    最近更新 更多