Pergunta

Então, eu sou novo para LINQ para ser avisado o que estou fazendo pode ser completamente estúpido!

Eu tenho uma tabela de caseStudies e uma mesa de Serviços com muitos para muitos relasionship

os estudos de caso já existem e eu estou tentando inserir um serviço, enquanto que liga alguns estudos de caso que já existem para isso. Eu estava presumindo algo como isso iria funcionar?

 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()

        };

Mas isso não é correto, pois reclama

Não é possível converter implicitamente tipo 'System.Linq.IQueryable' para 'System.Data.Objects.DataClasses.EntityCollection'

Pode alguém por favor me mostre o caminho correto.

Agradecemos antecipadamente

Foi útil?

Solução

Yo tem que adicionar o resultado da consulta para a coleção de estudos de caso em vez de tentar substituí-lo.

var service = new Service { ... };                     

foreach (var caseStudy in db.CaseStudies.Where(s => s.Name == caseStudyName)
{
    service.CaseStudies.Add(caseStudy);
}

Você pode quebrar isso em um método de extensão e obter uma sintaxe agradável.

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);
        }
    }
}

E agora você começa o seguinte.

var service = new Service { ... };                     

service.CaseStudies.AddRange(db.CaseStudies.Where(s => s.Name == caseStudyName));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top