获得明确的列表后,在查询中使用结果

时间:2019-03-29 18:06:17

标签: c# linq

最初,我获得了帮助,可以从具有多个节点进行分组的较大列表中获取不同的列表。我认为那行得通。

我现在需要有关如何使用该列表的帮助。

这是我的代码:

var LOE = results.Body
                 .getEntitiesResponse
                 .getEntities
                 .listOfEntities
                 .Select(x=>new string[]{x.entityIdentification.DUNS,x.entityIdentification.DUNSPlus4})
                 .Distinct();

foreach (var d in LOE)
{
    using (OleDbConnection conn = new OleDbConnection(cm.ConnectionString))
    {
        using (OleDbCommand cmd = new OleDbCommand())
        {
            cmd.CommandText = "sam.DeleteRecordsToBeUpdated";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@a", d.DUNS);  //This is my problem area
            cmd.Parameters.AddWithValue("@b", d.DUNSPlus4); //This is my problem area
            cmd.Connection = conn;

            conn.Open();
            cmd.ExecuteNonQuery();
        }
    }
}

有人可以帮助我如何使用第一行中创建的新对象吗?

也许我没有正确设置第一行?我似乎无法像尝试那样使用该对象。

2 个答案:

答案 0 :(得分:3)

您的问题出在第一句话

var LOE = results.Body.getEntitiesResponse.getEntities.listOfEntities
          .Select(x=>new string[]{x.entityIdentification.DUNS,x.entityIdentification.DUNSPlus4})
          .Distinct();

您应该像下面这样

var LOE = results.Body.getEntitiesResponse.getEntities.listOfEntities
            .Select(x => new {
                x.entityIdentification.DUNS,
                x.entityIdentification.DUNSPlus4
            }).Distinct();

在您的情况下,您正在选择一个数组,而不是一个匿名类

答案 1 :(得分:1)

您可以创建一个类来将值映射到:

public class DunsMapping()
{
    public string Duns { get; set; }
    public string DunsPlus4 { get; set; }

    public DunsMapping(string duns, string duns4)
    {
        Duns = duns;
        DunsPlus4 = duns4;
    }
}

然后,linq将变为:

var LOE = results.Body
             .getEntitiesResponse
             .getEntities
             .listOfEntities
             .Select(x=>new DunsMapping(x.entityIdentification.DUNS,
                                        x.entityIdentification.DUNSPlus4))
             .Distinct();

或者,如果需要返回不同实体的列表,则可以使用GroupBy

var LOE = results.Body
             .getEntitiesResponse
             .getEntities
             .listOfEntities
             .GroupBy(g => new { g.DUNS, g.DUNSPlus4 })
             .Select(g => g.First());

这将返回IEnumerable<YourEntity>