0

所以我是 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”

有人可以告诉我正确的方法。

提前致谢

4

1 回答 1

0

您必须将查询结果添加到案例研究集合中,而不是尝试替换它。

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));
于 2009-10-28T11:09:18.493 回答