karan
karan

Reputation: 482

Count cannot be used like a method in an ASP.NET MVC controller

The title shows me the an error i.e. Count cannot be used like a method. This error shows in runtime in controller side.

Here is my code,

var dataList = (dynamic)null;

// Search    
if (!string.IsNullOrEmpty(searchValue))
{
    dataList = (from x in query
                select new
                       {
                            PartName = _Db.Part.Where(z => z.Id == x.Select(p => p.PartId).FirstOrDefault()).Select(p => p.Name),
                            ManufacturerName = _Db.Manufacture.Where(z => z.Id == x.Select(p => p.ManufacturerId).FirstOrDefault()).Select(p => p.name),
                            CategoryName = _Db.Category.Where(z => z.Id == x.Select(p => p.CategoryId).FirstOrDefault()).Select(p => p.Name == searchValue.ToString()),
                            Pcs = x.Sum(o => o.Pcs) - (from m in _Db.MaterialRecord
                                                       join s in _Db.ServiceJob on m.ServiceJobId equals s.Id
                                                       where m.pid == x.Select(p => p.PartId).FirstOrDefault()
                                                       select m).Sum(z => z.Qty),
                            Weight = _Db.Purchase.Where(p => p.Weight == x.Select(s => s.Weight).FirstOrDefault()).Select(a => a.Weight).FirstOrDefault(),
                            WeightType = x.Select(p => p.WeightTypeId).FirstOrDefault() > 0 ? ((WeightType)x.Select(p => p.WeightTypeId).FirstOrDefault()).ToString() : "",
                        }).ToList();
}
else
{
    dataList = (from x in query
        select new
        {
            PartName = _Db.Part.Where(z => z.Id == x.Select(p => p.PartId).FirstOrDefault()).Select(p => p.Name),
            ManufacturerName = _Db.Manufacture.Where(z => z.Id == x.Select(p => p.ManufacturerId).FirstOrDefault()).Select(p => p.name),
            CategoryName = _Db.Category.Where(z => z.Id == x.Select(p => p.CategoryId).FirstOrDefault()).Select(p => p.Name),
            Pcs = x.Sum(o => o.Pcs) -
            (from m in _Db.MaterialRecord
                join s in _Db.ServiceJob on m.ServiceJobId equals s.Id
                where m.pid == x.Select(p => p.PartId).FirstOrDefault()
                select m).Sum(z => z.Qty),
            Weight = _Db.Purchase.Where(p => p.Weight == x.Select(s => s.Weight).FirstOrDefault()).Select(a => a.Weight).FirstOrDefault(),

            WeightType = x.Select(p => p.WeightTypeId).FirstOrDefault() > 0 ? ((WeightType)x.Select(p => p.WeightTypeId).FirstOrDefault()).ToString() : "",
        }).ToList();
    }

    // total number of rows count     
    recordsTotal = dataList.Count();

    // Paging     
    var data = dataList.Skip(skip).Take(pageSize).ToList();

    // Returning Json Data
    return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data });
}

Now when I run the program at that time

recordsTotal = dataList.Count();

in this line shows this error:

Non-invocable member 'System.Collections.Generic.List<<>f__AnonymousType15,System.Linq.IQueryable,System.Linq.IQueryable,int,int,string>>.Count' cannot be used like a method.

Upvotes: 0

Views: 2540

Answers (1)

SᴇM
SᴇM

Reputation: 7213

You can't call Count() method on dynamic type which is List. Count() method is extension to IEnumerable<>. You can use Enumerable.Count() method instead:

recordsTotal = Enumerable.Count(dataList);

or remove parenthesis:

// There is Count property in List<T>
recordsTotal = dataList.Count;

More details in this post.

Upvotes: 2

Related Questions