1

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 ?

2
  • Looks like XY problem. Could you describe what you're trying to achieve? Commented Feb 16, 2014 at 7:15
  • I'm guessing you want to do a Join? Commented Feb 16, 2014 at 7:21

3 Answers 3

1

How to about replace

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

with

cardtaglist.Any(e=>e.FKCardTagID==u.CardID)
Sign up to request clarification or add additional context in comments.

Comments

1

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 {
            ....

Comments

0

Use:

   var result=cardtaglist.Any(e=>e.FKCardTagID==u.CardID)

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.