Похоже, ваша главная проблема в том, что вы пытаетесь раздать IQueryable анонимного типа вместо IQueryable of Challenges .
В идеале вы должны были бы дать определение вашим объектам POCO (если сначала в коде) или классам в .edmx, если вы используете интерфейс дизайна для своего контекста EF. Таким образом, мы можем убедиться, что вы на самом деле отображаете информацию о соединении в объекты Challenge. Насколько я могу судить, вы делаете это, и я собираюсь ответить на это в соответствии с этим предположением; хотя было бы неплохо быть уверенным.
Мне удалось определить следующее как простой пример EF:
class Program
{
static ChallengeContext Context = null;
static void Main(string[] args)
{
try
{
var test = GetChallenges();
}
finally
{
Context.Dispose();
}
}
public static IQueryable<Challenge> GetChallenges()
{
Context = new ChallengeContext();
DbSet<Challenge> challenges = Context.Challenges;
DbSet<ChallengeCategory> categories = Context.Categories;
return challenges.Join(
categories,
ch => ch.Category,
cc => cc.Id,
(ch, cc) => new Challenge()
{
Id = ch.Id
});
}
}
internal class ChallengeContext:DbContext
{
public DbSet<Challenge> Challenges { get; set; }
public DbSet<ChallengeCategory> Categories { get; set; }
}
internal class ChallengeCategory
{
public int Id { get; set; }
}
public class Challenge
{
public int Id { get; set; }
public int Category { get; set; }
}
Что подсказывает мне, что должно работать следующее:
public IQueryable<Challenges> GetChallenges()
{
DbSet<Challenges> challenges = challengeContext.Challenges;
DbSet<ChallengeCategories> categories = challengeContext.ChallengeCategories;
return challenges.Join(
categories,
ch => ch.Category,
cc => cc.Id,
(ch, cc) => new Challenges()
{
id = ch.Id,
title = ch.Title,
createdAt = ch.CreatedAt,
daysNeeded = ch.DaysNeeded,
reward = ch.Reward,
difficulty = ch.Difficulty,
completedBy = ch.CompletedBy,
imgUrl = ch.ImgUrl,
subcategory = cc.Title,
category = cc.Title,
instructions = ch.Instructions
});
}
Пожалуйста, дайте мне знать, если это не решит вашу проблему.