假设我有一个包含以下内容的数据库:
+---------------------------------------+
| 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的调用如下所示:
主要问题是,更具体地说,这是使用唯一“密钥”检索所有用户的最佳方式,并使用API插入它们,然后转到下一个“密钥”并插入所有用户那个“钥匙”。
我希望我足够具体,否则请我澄清。
提前致谢!
答案 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的用户。