Sequence contains more than one element

后端 未结 5 2042
醉酒成梦
醉酒成梦 2020-12-03 02:11

I\'m having some issues with grabbing a list of type \"RhsTruck\" through Linq and getting them to display.

RhsTruck just has properites Make, Model, Serial etc...

相关标签:
5条回答
  • 2020-12-03 02:48
    Use FirstOrDefault insted of SingleOrDefault..
    

    SingleOrDefault returns a SINGLE element or null if no element is found. If 2 elements are found in your Enumerable then it throws the exception you are seeing

    FirstOrDefault returns the FIRST element it finds or null if no element is found. so if there are 2 elements that match your predicate the second one is ignored

       public int GetPackage(int id,int emp)
               {
                 int getpackages=Convert.ToInt32(EmployerSubscriptionPackage.GetAllData().Where(x
       => x.SubscriptionPackageID ==`enter code here` id && x.EmployerID==emp ).FirstOrDefault().ID);
                   return getpackages;
               }
    
     1. var EmployerId = Convert.ToInt32(Session["EmployerId"]);
                   var getpackage = GetPackage(employerSubscription.ID, EmployerId);
    
    0 讨论(0)
  • 2020-12-03 02:50

    SingleOrDefault method throws an Exception if there is more than one element in the sequence.

    Apparently, your query in GetCustomer is finding more than one match. So you will either need to refine your query or, most likely, check your data to see why you're getting multiple results for a given customer number.

    0 讨论(0)
  • 2020-12-03 02:53

    As @Mehmet is pointing out, if your result is returning more then 1 elerment then you need to look into you data as i suspect that its not by design that you have customers sharing a customernumber.

    But to the point i wanted to give you a quick overview.

    //success on 0 or 1 in the list, returns dafault() of whats in the list if 0
    list.SingleOrDefault();
    //success on 1 and only 1 in the list
    list.Single();
    
    //success on 0-n, returns first element in the list or default() if 0 
    list.FirstOrDefault();
    //success 1-n, returns the first element in the list
    list.First();
    
    //success on 0-n, returns first element in the list or default() if 0 
    list.LastOrDefault();
    //success 1-n, returns the last element in the list
    list.Last();
    

    for more Linq expressions have a look at System.Linq.Expressions

    0 讨论(0)
  • 2020-12-03 02:55

    The problem is that you are using SingleOrDefault. This method will only succeed when the collections contains exactly 0 or 1 element. I believe you are looking for FirstOrDefault which will succeed no matter how many elements are in the collection.

    0 讨论(0)
  • 2020-12-03 02:56

    FYI you can also get this error if EF Migrations tries to run with no Db configured, for example in a Test Project.

    Chased this for hours before I figured out that it was erroring on a query, but, not because of the query but because it was when Migrations kicked in to try to create the Db.

    0 讨论(0)
提交回复
热议问题