2014-02-16 3 views
2

Я пытаюсь получить результаты от LINQ query-Выберите из списка LINQ

public ActionResult TagFilter(TagModel tag) { 
     List<CardModel> cardlist = null; 
     var cardtaglist = (from u in db.CardTagTables 
          where u.CardTagName == tag.tagName 
          select u).ToList(); 
     cardlist = (from u in db.CardTables 
        where u.CardID == cardtaglist.Where(e=>e.FKCardTagID==u.CardID) 
        select new CardModel { 
         cardHashCode = tag.tagName, 
         cardDate = u.CardDate, 
         cardFileName = u.CardFileName, 
         cardFilePath = u.CardFilePath, 
         cardID = u.CardID, 
         cardTitle = u.CardTitle 
        }).ToList(); 
     if (cardlist.Count == 0) { 
      return Json(new { success = false }); 
     } 
     else { 
      return PartialView("_FunHomePartial", cardlist); 
     } 

    } 

Где матч tag=>tagName бы из списка cardtaglist.

Я получаю Cannot implicitly convert type int to bool ошибку в линейчатом

where u.CardID == cardtaglist.Where(e=>e.FKCardTagID==u.CardID) 

Как я сопрягать элементы из списка cardtaglist?

+0

Похоже [XY проблема] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Не могли бы вы описать, чего вы пытаетесь достичь? – MarcinJuraszek

+0

Я предполагаю, что вы хотите сделать Присоединиться? – David

ответ

1

Как о замене

u.CardID == cardtaglist.Where(e=>e.FKCardTagID==u.CardID) 

с

cardtaglist.Any(e=>e.FKCardTagID==u.CardID) 
1

Прежде всего, почему вы выбираете все CardTagTable объект, если вы используете только FKCardTagID!? Лучший способ - выбрать только необходимые поля:

var cardtagIds = (from u in db.CardTagTables 
        where u.CardTagName == tag.tagName 
        select u.FKCardTagID).ToList(); 

Об ошибке, вы traying сравнить IQueriable с числовым значением. Вы можете использовать Contains метод в данном случае:

cardlist = (from u in db.CardTables.Where(u => cardtagIds.Contains(u.CardID)); 
      select new CardModel { 
      .... 

Edit

Кроме того, этот запрос может быть оптимизирован:

cardlist = (from u in db.CardTables.Where(u => 
       db.CardTagTables 
        .Where(ct => ct.CardTagName == tag.tagName) 
        .Select(ct => ct.FKCardTagID) 
        .Contains(u.CardID)) 
      select new CardModel { 
      .... 
0

Использование:

var result=cardtaglist.Any(e=>e.FKCardTagID==u.CardID) 
Смежные вопросы