Search code examples
c#asp.net-mvclinq-to-excel

LinqToExcel Error when using DISTINCT keyword


I am trying to pull distinct values from an Excel Worksheet using the LinqToExcel library.

I keep getting an error

"{"Syntax error (missing operator) in query expression '(MOD)'."}"

I have tried everything and can't seem to pull the distinct values from this column.

Any assistance would be greatly appreciated.

Thanks in Advance,

Code is as follows.

public class WorksheetRow
{
    public String CPT { get; set; }
    public String MOD { get; set; }
    public String DESCRIPTION { get; set; }
    public double FEE { get; set; }
}

public class FileUtilsController : Controller
{
    //
    // GET: /FileUtils/

    public ActionResult Index()
    {
        return View();
    }

    public ActionResult FileUpload()
    {
            return View();


    }

    // This action handles the form POST and the upload
    [HttpPost]
    public ActionResult FileUpload(HttpPostedFileBase file)
    {
        // Verify that the user selected a file
        if (file != null && file.ContentLength > 0) 
        {
            // extract only the fielname
            var fileName = Path.GetFileName(file.FileName);
            // store the file inside ~/App_Data/uploads folder
            var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
            file.SaveAs(path);

            var excel = new ExcelQueryFactory(path);
            List<String> worksheetNames = excel.GetWorksheetNames().ToList();
            String FirstWorksheet = worksheetNames[0];
            //Query Column Names
            //The GetColumnNames() method can be used to retrieve the list of column names in a worksheet.
            IEnumerable<String> ProcCodeModifiers = (from row in excel.Worksheet<WorksheetRow>(FirstWorksheet)
                                                     where row.MOD != null
                                                     select row.MOD).Distinct();


            ViewData["Modifiers"] = "";
            foreach (String item in ProcCodeModifiers)
            {
                ViewData["Modifiers"] += item + ", ";
            }

            // redirect back to the index action to show the form once again
//                return RedirectToAction("Index", "Home");

        }

        return View();

    }

Solution

  • I'll have to do more research into why this error is happening, but a quick workaround is to convert the query to a list before performing the Distinct() operation.

    Here's a code example

    IEnumerable<String> ProcCodeModifiers = (from row in excel.Worksheet<WorksheetRow>(FirstWorksheet)
                                             where row.MOD != null
                                             select row.MOD).ToList().Distinct();