使用LINQ根据另一个列的值选择一个列
本文关键字:一个 选择 LINQ 另一个 使用 | 更新日期: 2023-09-27 18:17:09
我的问题类似于这里的问题:根据另一个列's值选择一个特定的列,但在LINQ中,使用VS2010, c#, .Net 4.0和LINQ到实体
下面是我遇到问题的代码片段:
var BillingNumbers = (from o in mycontext.MyOrders
where o.Status.Description.Trim().ToUpper().Equals("SHIPPED")
&& (o.ActualShipDate >= date1.Date && o.ActualShipDate < date2.Date)
select new
{BillingNumber = (
o.SiteID == "NYC"? o.NYCBillingNumber.Trim():
o.SiteID == "DAL" ? o.DallasBillingNumber.Trim(): "unknown")
});
foreach (var billingnumber in BillingNumbers)
{
sqlcmd = MyDatabase.GetStoredProcCommand("MyBillingNumberSP") as SqlCommand;
sqlcmd.CommandTimeout = Int32.Parse(Settings.Default.SQL_COMMAND_TIMEOUT.ToString());
MyDatabase.AddInParameter(sqlcmd, "@BillingNumber", DbType.String, billingnumber);
MyDatabase.AddOutParameter(sqlcmd, "@MyOutputParam", DbType.Boolean, 1);
LobjDS = MyDatabase.ExecuteDataSet(sqlcmd); //GETTING AN ERROR HERE
bool JobbingApplied = Convert.ToBoolean(MyDatabase.GetParameterValue(sqlcmd, "@MyOutputParam"));
Console.WriteLine(billingnumber);
}
ExecuteDataSet命令抛出InvalidCastException,消息为:
将参数值从<>f__AnonymousType0 ' 1转换为字符串失败。
是什么错了,为什么这个匿名类型抛出错误时,试图解释为字符串?
Replace
MyDatabase.AddInParameter(sqlcmd, "@BillingNumber", DbType.String, billingnumber);
MyDatabase.AddInParameter(sqlcmd, "@BillingNumber", DbType.String, billingnumber.BillingNumber);
var billingnumber
是一个匿名类型,只有一个字符串属性BillingNumber
。您需要引用该属性,它不能自动转换为它的第一个成员。
另一种方法是替换
select new
{ BillingNumber = (
o.SiteID == "NYC"? o.NYCBillingNumber.Trim():
o.SiteID == "DAL" ? o.DallasBillingNumber.Trim(): "unknown")
}
select (
o.SiteID == "NYC"? o.NYCBillingNumber.Trim():
o.SiteID == "DAL" ? o.DallasBillingNumber.Trim(): "unknown")
那么你根本不需要匿名类型