如何从我的数据库返回数据列表?

时间:2018-02-21 13:17:51

标签: c#

我试图返回个人资料的用户详细信息,但不太确定如何。这是我到目前为止所做的,但不确定它是否接近。

public static async Task<List<UserProf>> ProfileSetUp(string userName, string firstName, string lastName, string profession, string county, string description)
    {
        CurrentPlatform.Init();
        List<UserProf> ls = await Client.GetTable<UserProf>().ToListAsync();
        UserProf u = ls.FirstOrDefault(x => x.Username == userName);
        UserProf f = ls.FirstOrDefault(x => x.Firstname == firstName);
        UserProf l = ls.FirstOrDefault(x => x.Lastname == lastName );
        UserProf p = ls.FirstOrDefault(x => x.Profession == profession);
        UserProf c = ls.FirstOrDefault(x => x.County == county);
        UserProf d = ls.FirstOrDefault(x => x.Description == description);

        List<string> profileList = new List<string>
        {
            userName,
            firstName,
            lastName,
            profession,
            county,
            description
        };
        return profileList;
    }

它给了我一个错误:

  

&#34;无法隐式将System.Collection.Generic.List<string>类型转换为System.Collection.Generic.List<AppName.UserProf>&#34;

尝试了一些解决方案来解决但是它修复了一个错误并给出了另一个错误:

  

&#34;异步方法的返回类型必须为void任务或任务&#34;

2 个答案:

答案 0 :(得分:1)

我认为你真正想要的只是一个基于用户名的用户,然后你可以在调用代码中比较它,看看属性是否相同。

public static Task<UserProf> ProfileSetUp(string userName)
{
    CurrentPlatform.Init();
    return Client.GetTable<UserProf>().SingleOrDefaultAsync(x => x.Username == userName);
}

我认为您正在尝试过滤数据库并根据输入返回匹配列表。

public static async Task<List<UserProf>> ProfileSetUp(string userName, string firstName, string lastName, string profession, string county, string description)
{
    CurrentPlatform.Init();
    return await Client.GetTable<UserProf>()
        .Where(x => x.Username == userName
                && x.Firstname == firstName
                && x.Lastname == lastName
                && x.Profession == profession
                && x.County == county
                && x.Description == description)
        .ToListAsync();
}

如果您想匹配满足任何条件的地方,请将所有&&替换为||以进行OR。

也不需要async/await,因为您不需要等待方法内的结果。这是没有它的第二个变体,并且对任何匹配使用OR。

public static Task<List<UserProf>> ProfileSetUp(string userName, string firstName, string lastName, string profession, string county, string description)
{
    CurrentPlatform.Init();
    return Client.GetTable<UserProf>()
        .Where(x => x.Username == userName
                || x.Firstname == firstName
                || x.Lastname == lastName
                || x.Profession == profession
                || x.County == county
                || x.Description == description)
        .ToListAsync();
}

答案 1 :(得分:0)

你的问题是:

  1. 您没有返回正确的类型。你没有给出完整的错误信息(你在我写这篇文章时编辑了它)。它说List<string>不会隐式转换为List<UserProf>
  2. 您没有使用变量。您将根据传递给方法的参数填充返回值,而不是lambda表达式的返回值。
  3. 这可以解决您的问题:

            List<UserProf> profileList = new List<UserProf>
            {
                u,
                f,
                l,
                p,
                c,
                d
            };
            return profileList;
    
    但是,我认为你不会得到你想要的东西。我认为你真正想要的是返回一个用户配置文件中的每一个字符串值,因此您可能需要更改函数签名以返回单个UserProf,在函数中创建对象,然后返回对象。你可以在一个lambda中做到这一点:

     UserProf u = ls.FirstOrDefault(x => 
          x.Username == username 
          && x.Firstname == firstname
          && x.Lastname == lastname 
          && x.Profession == profession 
          && x.County == county 
          && x.Description == description);
    

    另外,使用正确的命名约定。变量的“username”之类的复合词应为“userName”,对象定义中的“x.Firstname”等属性应为“x.FirstName”。如果你没有骆驼或帕斯卡尔复合词,VS 2017将把它称为警告。