Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法隐式转换类型';字符串[]和#x27;至';字符串';_C#_Asp.net_.net_Asp.net Mvc_Linq - Fatal编程技术网

C# 无法隐式转换类型';字符串[]和#x27;至';字符串';

C# 无法隐式转换类型';字符串[]和#x27;至';字符串';,c#,asp.net,.net,asp.net-mvc,linq,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

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

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视图中,我使用带有值对的会话将数据传递给这个“MorePost”post控制器。如果将.Split()方法添加到“ViewBag.messages2”,则会出现另一个错误,即“'System.Array'不包含拆分的定义”。这是从网上进一步研究来解决这个问题的。我对ViewBag的LINQ查询将数据传递给对象名“sentprint”,请问我是否有任何错误。我能够从LINQ查询中以“P.O.Box AX 33 Miami”的形式检索数据。我也尝试过使用“TempData”。 像这样的TempData[“postaladress”]。 我确实尝试过其他方法,这些方法会导致其他错误,如“无法将类型‘System.Data.Entity.Infrastructure.DbQuery’隐式转换为‘string’”。对不起,我是LINQ query的新手。提前谢谢

 [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(),这样您将始终只得到一个字符串项(与前1项类似,但略有不同)

所以您的查询应该如下所示

  var dbsenderPostal = (from a in db.TblCUSTOMER_PROFILE
                                where a.FullName == search
                                select a.PostalAddress).FirstOrDefault();
现在,会话变量将是一个字符串


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

您的问题在于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和泛型。

这是一个例子,说明在您知道自己在做什么之前,为什么不应该使用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

这毫无意义,您实际上是在尝试将字符串[]放入字符串中。

这是一个示例,说明了在您知道自己在做什么之前,为什么不应该使用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

这毫无意义,您实际上是在尝试将字符串[]放入字符串。

这个答案是正确的,我只想补充一点,FirstOrDefault()方法名称令人困惑,因为如果查询不返回结果,您将得到一个null,而不是像空字符串那样的默认值。因此,如果邮政地址在代码中的某个地方不能为null,您可能需要处理它。@Dexter很高兴知道它对您有效,请将答案标记为correct此答案是正确的,我只想添加FirstOrDefault()方法名称令人困惑,因为如果查询未返回任何结果,您将得到null,而不是像空字符串那样的默认值。因此,如果邮政地址不能为空,您可能需要处理它。@Dexter很高兴知道它对您有用,请将答案标记为正确