Search code examples
entity-frameworklinq-to-entities

declare variable to store linq entity for conditional statements


I am trying to look up record using if I have the key then use Find if not use Where

private ApplicationDbContext db = new ApplicationDbContext();

    public bool DeactivatePrice(int priceId = 0, string sponsorUserName = "")
    {
        var prices = db.BeveragePrices;

        // if we have an id then find
        if (priceId != 0)
        {
           prices = prices.Find(priceId);
        }
        else
        {
            prices = prices.Where(b => b.UserCreated == sponsorUserName);
        }

        if (prices != null)
        {
            // do something
        }
        return true;

I get the following error for

prices = prices.Find(priceId);

Cannot convert app.Model.BeveragePrices from system.data.entity.dbset

I am copying the pattern from this answer but something must be different.


Solution

  • Seems you forgot to put a predicate inside the Find function call. Also you need to do ToList on the collection. The second option is a lot more efficient. The first one gets the whole collection before selection.

    Another note commented by @Alla is that the find returns a single element. So I assume another declaration had been made for 'price' in the first option I state down here.

    price = prices.ToList.Find(b => b.PriceId == priceId);

    Or

    prices = prices.Select(b => b.PriceId == priceId);

    I assume the field name is PriceId.