我在通过Linq获取"RhsTruck"类型列表并让它们显示时遇到了一些问题.
RhsTruck只有Make,Model,Serial等... RhsCustomer有属性CustomerName,CustomerAddress等...
我一直收到错误"序列包含多个元素".有任何想法吗?我是以错误的方式接近这个吗?
public RhsCustomer GetCustomer(string customerNumber)
{
using (RhsEbsDataContext context = new RhsEbsDataContext() )
{
RhsCustomer rc = (from x in context.custmasts
where x.kcustnum == customerNumber
select new RhsCustomer()
{
CustomerName = x.custname,
CustomerAddress = x.custadd + ", " + x.custcity
CustomerPhone = x.custphone,
CustomerFax = x.custfax
}).SingleOrDefault();
return rc;
}
}
public List<RhsTruck> GetEquipmentOwned(RhsCustomer cust)
{
using (RhsEbsDataContext context = new RhsEbsDataContext())
{
var trucks = (from m in context.mkpops
join c in context.custmasts
on m.kcustnum equals c.kcustnum
where m.kcustnum == cust.CustomerNumber
select new RhsTruck
{
Make = m.kmfg,
Model = m.kmodel,
Serial = m.kserialnum,
EquipID = m.kserialno1,
IsRental = false
}).ToList();
return trucks;
}
}
protected void Page_Load(object sender, EventArgs e)
{
string testCustNum = Page.Request.QueryString["custnum"].ToString();
RhsCustomerRepository rcrep = new RhsCustomerRepository();
RhsCustomer rc = rcrep.GetCustomer(testCustNum);
List<RhsTruck> trucks = rcrep.GetEquipmentOwned(rc);
// I want to display the List into a Gridview w/auto-generated columns
GridViewTrucks.DataSource = trucks;
GridViewTrucks.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
Jar*_*Par 242
问题是你正在使用SingleOrDefault
.只有当集合包含0或1个元素时,此方法才会成功.FirstOrDefault
无论集合中有多少元素,我相信您正在寻找哪种成功.
Meh*_*ras 23
SingleOrDefault
Exception
如果序列中有多个元素,则抛出一个方法.
显然,您的查询GetCustomer
是找到多个匹配项.因此,您需要优化查询,或者最有可能检查您的数据,以了解您为什么获得给定客户编号的多个结果.
小智 8
Use FirstOrDefault insted of SingleOrDefault..
Run Code Online (Sandbox Code Playgroud)
SingleOrDefault 返回一个 SINGLE 元素,如果没有找到元素,则返回 null。如果在您的 Enumerable 中找到 2 个元素,则它会抛出您看到的异常
FirstOrDefault 返回它找到的第一个元素,如果没有找到元素,则返回 null。因此,如果有 2 个元素与您的谓词匹配,则忽略第二个元素
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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
161546 次 |
最近记录: |