質問

だから私は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));
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top