繁体   English   中英

无法将类型'string []'隐式转换为'string'

[英]Cannot implicitly convert type 'string[]' to 'string'

我的索引视图中有以下代码

public ActionResult Index(string searchBy, string search)
 {
   Session["FullName"] = search;

   var dbsenderPostal = (from a in db.TblCUSTOMER_PROFILE
                                where a.FullName == search
                                select a.PostalAddress).ToArray();

   Session["PostalAddress"] = dbsenderPostal;

   if (searchBy == "XXX")
        {
            return View(db.TblCUSTOMER_PROFILE.Where(senders => 
            senders.GeneratedCode == search || search == null).ToList());
        }
        else
        {

            return View(db.TblCUSTOMER_PROFILE.Where(senders => 
            senders.CustomerFullName.StartsWith(search) || search == 
            null).ToList());

        }
 }

在我的[HttpPost] MorePost视图中,我正在使用带有值对的Session将数据传递到此“ MorePost”发布控制器。 如果我将.Split()方法添加到“ ViewBag.messages2”,则会发生另一个错误,因为““ System.Array”不包含“ split”的定义”。 这是通过进一步的在线研究来解决这一问题。 请问我对ViewBag的LINQ查询有什么问题吗,这会将数据传递给对象名称“ sentprint”。 我能够从LINQ查询中以“ POBox AX 33 Miami ”检索数据。 我也尝试过使用'TempData'。 像这样的TempData [“ PostalAddress”]。 我确实尝试了其他方法,这些方法会产生其他错误,例如“无法将类型'System.Data.Entity.Infrastructure.DbQuery'隐式转换为'string'”。 抱歉,我是LINQ查询的新手。 提前致谢。

 [HttpPost]
 public ActionResult MorePost(string Itemn)
  {
    TblSENDERSINFORMATION sentprint = new TblSENDERSINFORMATION();

        ViewBag.messages = Session["FullName"];

        sentprint.NameOfSender = ViewBag.messages;

        ViewBag.messages2 = Session["PostalAddress"];

        sentprint.PostalAddress = ViewBag.messages2;  //Error found here

        sentprint.Item = Itemn;
  }

您的问题在于linq查询本身,让我解释一下原因

在您的查询中,由于这个原因,您将得到一个字符串数组

.ToArray()

即使只是一项,它也是包含一项的字符串数组

  var dbsenderPostal = (from a in db.TblCUSTOMER_PROFILE
                                where a.FullName == search
                                select a.PostalAddress).ToArray();

因此,您的解决方案非常简单,只需通过FirstOrDefault()更改ToArray() ,就可以始终只获得一个字符串项(就像top 1一样,但略有不同)

因此您的查询应如下所示

  var dbsenderPostal = (from a in db.TblCUSTOMER_PROFILE
                                where a.FullName == search
                                select a.PostalAddress).FirstOrDefault();

现在,您的会话变量将是一个字符串。

在这种情况下,您必须了解更好的linq和泛型。

这个例子说明了为什么不知道自己正在做什么之前不应该使用var的原因。

除非您能够读取代码,否则请使用强类型为软类型。

var dbsenderPostal = (from a in db.TblCUSTOMER_PROFILE
                                where a.FullName == search
                                select a.PostalAddress).ToArray();

字面意思是:

string[] dbsenderPostal = (from a in db.TblCUSTOMER_PROFILE
                                where a.FullName == search
                                select a.PostalAddress).ToArray();

因此:

ViewBag.messages2 = Session["PostalAddress"];
sentprint.PostalAddress = ViewBag.messages2

这没有任何意义,您实际上是在尝试将string []放入字符串中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM