2016-01-30 6 views
2

Я очень новичок в C# и я учусь, как я иду ...Linq заспорить в C#

У меня есть две таблицы, дневники и BlogCategories. В таблице Blog есть идентификатор, который ссылается на категорию в BlogCategories.

У меня возникли проблемы с синтаксисом на объединение:

var categories = new List<BlogCategory>(); 

     if (model.BlogCategoryId.HasValue) 
     { 
      var query = 
        from category in categories 
        join blog in model on category.Id equals model.BlogCategoryId 
        select new { BlogCategory = category.Name }; 

     } 

Вопрос заключается в том, что он не любит присоединиться и получить:

Error CS1941 The type of one of the expressions in the join clause is incorrect. Type inference failed in the call to 'Join' 

Любая помощь будет принята с благодарностью ... PHP не большой мальчик, это так.

Быстрая структура таблицы · блоги, · таблица: Id, BlogCategory, Название, Содержание

BlogCategories: Id, CategoryName

EDIT: Решение кажется, что это будет работать, но ошибка где:

var blogPosts = PopulateBlogPosts(); 

     if (model.BlogCategoryId.HasValue) 
     { 
      var blogPostCategories = PopulateBlogCategories(); 

      blogPosts = blogPostCategories.Where(c => c.Id == model.BlogCategoryId).Single(); 
     } 
+0

Что вы пытаетесь получить? Список объектов BlogCategory? – mason

+0

Только категория блога, где совпадает идентификатор в блоге. Я не знаю, почему у меня есть Product = prod.Name там .... – echoBr00tal

+0

Значит, вам просто нужна одна «BlogCategory»? 'BlogCategoryId' является основным ключом' BlogCategory'? – mason

ответ

1

Предполагая, categories является IEnumerable<BlogCategory>.

var category = categories.Single(c => c.Id == model.BlogCategoryId); 

Этот Single метод расширения утверждает, что вы ожидаете только один объект, чтобы соответствовать, и это позволяет фильтровать. Он выдает исключение, если есть что-то другое, кроме одной категории, которая соответствует критериям фильтра. Это более короткая форма:

var category = categories.Where(c => c.Id == model.BlogCategoryId).Single(); 
+0

Что делать, если категории IQueryable? – echoBr00tal

+0

@echo [, который наследуется от IEnumerable] (https://msdn.microsoft.com/en-us/library/system.linq.iqueryable (v = vs.100) .aspx) – mason

+0

Я не понимаю эту простую проблему I у меня ... Ваше решение похоже, что это сработает. Редактирование кода в исходном сообщении. – echoBr00tal

Смежные вопросы