【问题标题】:LINQ for SQL statement that returns single scalar value返回单个标量值的 LINQ for SQL 语句
【发布时间】:2016-03-20 00:49:21
【问题描述】:

我要执行以下选择:

SELECT 0 as Value

LINQ for SQL 中的相关语法是什么?

编辑

我想在这样的 Concat() 调用中使用相关的 LINQ for SQL 语句

var c = (from a in mytable select a.Value).Concat(select 0).Sum();

如您所见, Concat(select 0) 显然无法编译。有什么想法吗?

编辑 2

David 建议改用简单的集合。我试过了

private decimal[] mZeroDecimals = new[] { 0.0m };
...

public void MyFunction()
{
  var c = (from a in mytable select a.Value).Concat(mZeroDecimals).Sum();
  ...

但它会引发异常本地序列不能用于查询运算符的 LINQ to SQL 实现中,但 Contains() 运算符除外

【问题讨论】:

    标签: linq-to-sql scalar


    【解决方案1】:

    您实际上并没有查询任何内容,因此不涉及 LINQ。你只是在创建一个匿名对象,它有一个名为 Value 的属性:

    var obj = new { Value = 0 };
    

    编辑:根据您的评论,听起来您希望将此对象放在集合中。这不会使它成为 LINQ 查询(因为您仍然没有查询 任何东西),但您可以像声明单个对象一样轻松地声明一个集合。像这样的:

    var coll = new[] { new { Value = 0 } };
    

    由于这是一个集合,它可以与 LINQ 使用的任何可枚举扩展方法一起使用,这听起来就像您正在尝试做的那样。

    【讨论】:

    • 我真的需要 LINQ for SQL 语句,因为我想在 .Concat() 调用中使用它。我已经更新了我的问题,使其更加清晰。
    • @ViRuSTriNiTy:在这种情况下,您只需要一个集合而不是单个对象。我已经更新了答案以显示如何创建它。
    • 是的,使用集合编译但会抛出异常本地序列不能在查询运算符的 LINQ to SQL 实现中使用,除了 Contains() 运算符
    • @ViRuSTriNiTy:也许你可以更清楚地描述你在这里想要完成的事情?可能有一个更简单的解决方案。
    • 请查看原始问题。我想创建多行的总和,但这仅在有实际行时才有效。这里的想法是添加一个联合选择以确保至少返回一行并且 Sum() 不会崩溃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多