2014-02-16 42 views
2

选择我试图从LINQ查询 -从列表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得到匹配。

我得到线 -

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

Cannot implicitly convert type int to bool错误我如何匹配来自列表cardtaglist元素?

+0

貌似[XY你可以在这种情况下使用Contains方法问题](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(); 

关于您的错误,您正在搜索将IQueriable与数值进行比较。

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

编辑

而且,这种查询可以进行优化:

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)