我试图返回一个查询结果,其中包含登录用户的信息,将其存储在list数据类型中,但我的返回变量带有红色下划线,所以我可以在html页面上显示数据,但它在行上给出错误, 返回UserInfo; 说:
错误2无法将类型'Project.Models.User'隐式转换为 'System.Collections.Generic.List'
我不知道我的查询是否有效,但我只想尝试返回结果的第一行。这是我的代码:
public List<Models.User> GetUserInfo(Func<String> username)
{
List<Models.User> UserInfo;
if (username != null)
{
try{
var User = from m in db.MstUsers
where m.UserName == Convert.ToString(username)
select new Models.User
{
UserName = m.UserName,
FirstName = m.FirstName,
LastName = m.LastName,
EmailAddress = m.EmailAddress,
PhoneNumber = m.PhoneNumber
};
if (User.Any())
{
var Info = new List<Models.User> { User.First() };
UserInfo = Info.ToList();
}
}
catch
{
UserInfo = new List<Models.User>();
}
}
return UserInfo;
}
(编辑)我还创建了一个读取cookie的函数,这是我的代码:
public String GetCookie()
{
string username = "";
var cookie = Request.Headers.GetCookies("MyCookie").SingleOrDefault();
if (cookie != null)
{
username = cookie["MyCookie"].Value;
}
return username;
}
如何确定要返回的变量类型?使用List作为数据类型函数是不是正确的,这样我可以返回一个List变量?我真的很难理解在C#中返回值的概念。我仍然是C#.Net的新手,我根本不知道如何解决这个问题。我正在使用Visual Studio 2013.有人可以帮助我吗?
答案 0 :(得分:1)
Linq的结果必须是IQueryable,所以你可以直接使用.ToList()。
答案 1 :(得分:0)
我认为您可以将代码更改为:
public List<Models.User> GetUserInfo(Func<String> username)
{
List<Models.User> UserInfo = new List<Models.User>();
if (username != null)
{
try{
var User = (from m in db.MstUsers
where m.UserName == Convert.ToString(username)
select new Models.User
{
UserName = m.UserName,
FirstName = m.FirstName,
LastName = m.LastName,
EmailAddress = m.EmailAddress,
PhoneNumber = m.PhoneNumber
}).FirstOrDefault();
if (User != null)
{
UserInfo.Add(User);
}
}
catch
{
UserInfo = new List<Models.User>();
}
}
return UserInfo;
}
答案 2 :(得分:0)
List<User> UserInfo= null;
我不知道你为什么要通过Func<string>
而不是:
Convert.ToString(username)
DO
Convert.ToString(username())
我希望
的 db.MstUsers 强>
是返回IEnumerable<User>
或实现它的东西,否则它不会起作用
答案 3 :(得分:0)
你只是总是返回一个Models.User对象,试试这个。基本上你会收回你的一个对象,否则如果用户名为null或者在db DTO查找中找不到它,则为空对象:
public Models.User GetUserInfo(Func<String> username) {
User = new Models.User();
if (username == null){return User;}
try{
User = db.MstUsers.Where(
x => x.UserName==Convert.ToString(username)
).FirstOrDefault();
}
return User;
}
这会将User设置为空,然后在查询中找到值时设置为空。否则,它将通过并返回空用户。它将包含找到的一个用户,属性将是所有细节(用户名,名字等),除非失败,那么像User.UserName这样的东西将是null
或空字符串。
就个人而言,我重写这一点永远不会返回一个空对象。 GetUserInfo应该返回对象或者失败 - 然后是调用它的代码,捕获异常,而不是测试null / empty-string。但那只是我。