多くが既に存在する場合、Linq 1対多挿入
質問
だから私はlinqが初めてなので、私がやっていることは完全に愚かかもしれないことに注意してください!
caseStudiesの表と、多対多の関係を持つサービスの表があります
ケーススタディはすでに存在します。既に存在するいくつかのケーススタディをリンクしながら、サービスを挿入しようとしています。私はこのようなものがうまくいくと思っていましたか?
Service service = new Service()
{
CreateDate = DateTime.Now,
CreatedBy = (from u in db.Users
where u.Id == userId
select u).Take(1).First(),
Description = description,
Title = title,
CaseStudies = (from c in db.CaseStudies
where c.Name == caseStudy
select c),
Icon = iconFile,
FeatureImageGroupId = imgGroupId,
UpdateDate = DateTime.Now,
UpdatedBy = (from u in db.Users
where u.Id == userId
select u).Take(1).First()
};
しかし、これは文句を言うので正しくありません
タイプ「System.Linq.IQueryable」を「System.Data.Objects.DataClasses.EntityCollection」に暗黙的に変換することはできません
誰かが正しい方法を教えてもらえますか。
事前に感謝
解決
クエリの結果を置き換えるのではなく、ケーススタディコレクションに追加する必要があります。
var service = new Service { ... };
foreach (var caseStudy in db.CaseStudies.Where(s => s.Name == caseStudyName)
{
service.CaseStudies.Add(caseStudy);
}
これを拡張メソッドでラップし、素晴らしい構文を取得できます。
public static class ExtensionMethods
{
public static void AddRange<T>(this EntityCollection<T> entityCollection,
IEnumerable<T> entities)
{
// Add sanity checks here.
foreach (T entity in entities)
{
entityCollection.Add(entity);
}
}
}
そして、次のようになりました。
var service = new Service { ... };
service.CaseStudies.AddRange(db.CaseStudies.Where(s => s.Name == caseStudyName));
所属していません StackOverflow