添加新记录var LINQ

时间:2014-08-06 15:05:15

标签: c# json linq

我正在尝试在var"问题"中添加新记录。我从SQL服务器DB获取XXX列表,并按如下方式返回jTable网格:

public dynamic XXXList(int CCC)
    {
        try
        {
            var issue = db.XXX.ToList().
                Select(c => new { DisplayText = c.AAA, Value = c.BBB, c.CCC}).
                Where(h => h.HHH == JJJ);

            return (new { Result = "OK", Options = issue });
        }
        catch (Exception ex)
        {
            return (new { Result = "ERROR", Message = ex.Message });
        }
    }

该函数返回:

{
    "$id": "1",
    "Result": "OK",
    "Options": [
        {
            "$id": "2",
            "DisplayText": "Food and Beverages",
            "Value": 4,
            "CCC": 4
        },
        {
            "$id": "3",
            "DisplayText": "Wrong software versions",
            "Value": 5,
            "CCC": 4
        }
    ]
} 

如何在返回问题之前将另一条记录添加到问题var中? 示例:

{
    "DisplayText": "new display text",
    "Value": 5,
    "CCC": 4
}

修改

在应用答案之后,这是我的功能:

public dynamic XXXList(int CCC)
{
    try
    {
        var newRecord = new[] { new { DisplayText = "None", Value = -1, CCC  = -1} };

        var issue = db.ProjectXXXs.Where(h => h.CCC == JJJ).Select(c => new { DisplayText = c.AAA, Value = c.BBB, c.CCC }).ToList().Concat(newRecord);

        return (new { Result = "OK", Options = issue });
    }
    catch (Exception ex)
    {
        return (new { Result = "ERROR", Message = ex.Message });
    }
}

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

连接任何其他项目:

var additional = new[] {new { DisplayText = ..., Value = ..., CCC = ... },
                        new { DisplayText = ..., Value = ..., CCC = ... }};

var issue = db.XXX.
    Where(h => h.HHH == JJJ).
    Select(c => new { DisplayText = c.AAA, Value = c.BBB, c.CCC}).
    ToList().
    Concat(additional);

(编辑:对于Where,Select和ToList的重新排序归功于James Curran。)

答案 1 :(得分:3)

首先要做的是将ToList()移到最后。在ToList所在的位置,您可以从数据库的每条记录中读取每一列,从中构建一个列表,然后进行搜索。使用最后的ToList,您只需将该记录的那些列的查询发送到数据库,然后根据返回的内容构建一个列表。您还需要移动选择前的位置,因此它适用于XXX记录而不是选择的输出。

var issue = db.XXX
    .Where(h => h.HHH == JJJ)
    .Select(c => new { DisplayText = c.AAA, Value = c.BBB, c.CCC})
    .ToList();

从此处,其他人建议的AddConcat选项应该有效,但是,您可能必须使用命名类而不是自治类。

 class OptionValues
 {
      public string DisplayText {get; set;}
      public int  Value {get; set;}
      public int  CCC {get; set;}
 }

 // :
 // :
  .Select(c => new OptionValues {DisplayText = c.AAA, Value = c.BBB, CCC= c.CCC})

答案 2 :(得分:0)

我不确定,但你不能在var问题下写一行:

issue.Add(new { });

使用您想要的值。