使用特定密钥从SQL检索数据到C#application

时间:2016-03-23 15:11:26

标签: c# sql sql-server

假设我有一个包含以下内容的数据库:

+---------------------------------------+
| Key   Username  Firstname   Lastname  |
+---------------------------------------+
| 1234  user1     Firstname1  Lastname1 |
| 1234  user2     Firstname2  Lastname2 |
| 1234  user3     Firstname3  Lastname3 |
| 5678  user4     Firstname4  Lastname4 |
| 9012  user5     Firstname5  Lastname5 |
| 9012  user6     Firstname6  Lastname6 |
| 9012  user7     Firstname7  Lastname7 |
| 3456  user8     Firstname8  Lastname8 |
| 3456  user9     Firstname9  Lastname9 |
+---------------------------------------+

然后,我想在C#应用程序中检索数据,并将其发送到具有以下要求的API:

  • API希望数据与“密钥”一起发送,这样每个密钥都会有一个呼叫,但是必须在同一个呼叫中发送带有该密钥的所有用户。

  • “密钥”列中的值为“未知”(例如,可以向“密钥”添加更多值)。

我已经有了一个用于创建具有特定密钥的所有用户的类,并且对API的调用如下所示:

  • insertUser(key,usersArray),其中“key”是数据库中“Key”列的值,“usersArray”是从一个类创建的数组,该类使用具有特定“Key”的所有用户从数据库中。

主要问题是,更具体地说,这是使用唯一“密钥”检索所有用户的最佳方式,并使用API​​插入它们,然后转到下一个“密钥”并插入所有用户那个“钥匙”。

我希望我足够具体,否则请我澄清。

提前致谢!

1 个答案:

答案 0 :(得分:0)

我非常不确定你在这里找到了什么。但假设您已将数据访问部分关闭,LINQ可能是您的朋友。具体来说,是GroupBy方法。

var allRows = GetAllRows(); // Returns IEnumerable<User>, where User has properties
                            // for Key, Username, FirstName, and LastName.

var grouped = allRows.GroupBy(c => c.Key);

foreach (var v in grouped)
{
    InsertUsers(v.Key, v); // v is IEnumerable<User>
}

这会将所有记录加载到计算机的内存中,然后对它们进行分组(仍在内存中),遍历每个唯一的Key值,并上传该给定密钥的用户。

这是一个很好的解决方案如果您可以负担将所有数据加载到内存中。这取决于您的具体情况,可能适用也可能不适用。

如果内存比带宽和时间更受关注,它也可以简单地SELECT DISTINCT Key,然后遍历这些内容,获取相关用户并上传它们。较慢,但您只需要一次加载一个Key的用户。