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

时间:2018-01-18 15:35:33

标签: c# asp.net .net asp.net-mvc linq

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

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视图中,我使用具有值对的Sessions将数据传递给此'MorePost'后置控制器。如果我将.Split()方法添加到'ViewBag.messages2',则会出现另一个错误,因为“'System.Array'不包含split的定义”。这是从在线进一步研究来解决这个问题。我正在对ViewBag的LINQ查询做错,这是将数据传递给对象名称'sentprint'。我能够从LINQ查询中检索数据为“ P.O.Box 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;
  }

2 个答案:

答案 0 :(得分:2)

您的问题出在linq查询中,让我解释原因

在您的查询中,您将获得一个字符串数组

  

.ToArray()

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

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

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

所以你的查询应该是这样的

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

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

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

答案 1 :(得分:0)

这是一个为什么你不应该使用var的例子,直到你知道你在做什么。

使用强类型,除非您能够以软类型读取代码。

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

字面意思是:

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

因此:

{{1}}

这没有任何意义,你确实试图将字符串[]放入字符串中。