Reputation: 482
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
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