Reputation: 701
I am trying to get matches from linq query-
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);
}
}
Where match of tag=>tagName
would be from list cardtaglist
.
I get Cannot implicitly convert type int to bool
error in line-
where u.CardID == cardtaglist.Where(e=>e.FKCardTagID==u.CardID)
How Do I match elements from list cardtaglist
?
Upvotes: 1
Views: 13528
Reputation: 19567
First of all, why you select all CardTagTable
entity, if you use only FKCardTagID
!? The best way - to select only required fields:
var cardtagIds = (from u in db.CardTagTables
where u.CardTagName == tag.tagName
select u.FKCardTagID).ToList();
About your error, you are traying to compare IQueriable with numeric value. You can use Contains
method in this case:
cardlist = (from u in db.CardTables.Where(u => cardtagIds.Contains(u.CardID));
select new CardModel {
....
Edit
Also, this query can be optimized:
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 {
....
Upvotes: 1
Reputation: 95
How to about replace
u.CardID == cardtaglist.Where(e=>e.FKCardTagID==u.CardID)
with
cardtaglist.Any(e=>e.FKCardTagID==u.CardID)
Upvotes: 1