这是我到目前为止所做的,我将类别稍微更改为一个名为 CategoryIds 的 int 数组,只是因为它在我的系统中的使用方式,但我本可以这样做survey.Categories.Select(c => c.Id).Zip(...
// insert using source data from form post matching a ISurvey interface, where .Id will be 0
var surveyId = conn.Query<int>("INSERT ... " +
"SELECT CAST(SCOPE_IDENTITY() AS INT)")
.First();
if(source.CategoryIds != null && source.CategoryIds.Count() > 0) {
var surveyCategories = source.CategoryIds
.Zip(
Enumerable.Repeat<int>(
surveyId,
source.CategoryIds.Count()
),
(c, s) => new { SurveyID = s, CategoryID = c }
);
conn.Execute(@"INSERT INTO [SurveyCategories] " +
"VALUES (@SurveyID, @CategoryID)",
surveyCategories);
}
更新:
这是我根据 Eren 的回答使用的新方法SelectMany
,使用 Enumerable.Repeat(..) 有点小技巧,但这是迄今为止我能够做同样事情的唯一方法。
...
var surveyCategories = source.CategoryIds.SelectMany(
s => Enumerable.Repeat(surveyId, 1),
(c, s) => new { SurveyID = s, CategoryID = c });
...