将LINQ查询从方法语法转换为查询语法

时间:2014-02-07 15:27:01

标签: linq syntax

您好我正在将职业转变为计算机编程。我还在上大学。我必须将以下LINQ查询从方法语法更改为查询语法。让我得到的是方法查询的2个步骤。首先,它获得一个teamId,然后根据上下文并使用teamId返回一个列表。我对如何将其转换为查询方法感到困惑。大多数问题都是关于从查询语法到方法的。

有人可以帮忙吗?

    public IEnumerable<TemplateView> GetTemplates(Guid userId, int languageId)
    {
        using (DigigateEntities context = new Models.DigigateEntities())
        {
            var teamId = context
                            .TeamMembers
                            .Include("Team")
                            .FirstOrDefault(c => c.UserId == userId)
                            .Team.Id;

            return context
                        .TeamTemplates.Include("Template")
                                .Where(c => c.TeamId == teamId)
                                .Select(c => c.Template)
                                .Where(c => c.StatusId == 1/*Active*/)
                                    .Select(k => new TemplateView
                                    {
                                        TemplateName = k.Name,
                                        Id = k.Id,
                                        IsCustom = k.Custom,
                                        TypeId = k.TypeId,
                                        TypeName = k.TemplateType.Description,
                                        FileName = k.FileName,
                                        TemplateImage = "test.png",
                                        LanguageId = k.LanguageId,
                                        LanguageName = k.Language.Name,
                                        CreateDate = k.CreateDate
                                    }).ToList();
        }
    } 

2 个答案:

答案 0 :(得分:0)

第一个很直接。我将查询的执行延迟到最后。由于您在访问.FirstOrDefault().Team.Id;

的示例中可能会获得空引用异常
var teamId = (from c in context.TeamMembers.Include("Team")
             where c.UserId == userId
             select c.Team.Id).FirstOrDefault();

这个只需要使用into来继续查询语句

return (from c in context.TeamTemplates.Include("Template")
       where c.TeamId == teamId
       select c.Template into k
       where k.StatusId == 1
       select new TemplateView
       {
         TemplateName = k.Name,
         Id = k.Id,
         IsCustom = k.Custom,
         TypeId = k.TypeId,
         TypeName = k.TemplateType.Description,
         FileName = k.FileName,
         TemplateImage = "test.png",
         LanguageId = k.LanguageId,
         LanguageName = k.Language.Name,
         CreateDate = k.CreateDate
        }).ToList();

答案 1 :(得分:0)

public IEnumerable<TemplateView> GetTemplates(Guid userId, int languageId)
{
    using (DigigateEntities context = new Models.DigigateEntities())
    {
        var teamId = (from tm in context.TeamMembers.Include("Team")
                     where tm.UserId==userId
                     select tm.Id).FirstOrDefault();

        IEnumerable<TemplateView> result = from k in (from tmp in context.TeamTemplates.Include("Template")
                                                      select tmp.Template)
                                           where k.StatusId==1
                                           select new
                                           {

                                               TemplateName = k.Name,
                                               Id = k.Id,
                                               IsCustom = k.Custom,
                                               TypeId = k.TypeId,
                                               TypeName = k.TemplateType.Description,
                                               FileName = k.FileName,
                                               TemplateImage = "test.png",
                                               LanguageId = k.LanguageId,
                                               LanguageName = k.Language.Name,
                                               CreateDate = k.CreateDate
                                           };
        return result;
    } 
相关问题