使用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转换为字符串失败。

是什么错了,为什么这个匿名类型抛出错误时,试图解释为字符串?

使用LINQ根据另一个列的值选择一个列

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")

那么你根本不需要匿名类型