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很高兴知道它对您有用,请将答案标记为正确