数据存储查询数组

Datastore Query Array

我正在尝试 运行 数据存储区查询以获取名称和价格列表。但是,我不断收到此错误消息:

Cannot implicitly convert type 'Google.Cloud.Datastore.V1.DatastoreQueryResults' to 'System.Collections.Generic.List<TestApp.Models.AllSportsStore>'

这是我使用的代码:

AllSportsStore.cs 页

public DatastoreDb _db;

[BindProperty]
public List<AllSportsStore> SportsStoreList { get; set; }


public void OnGet()
{
    Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xxxxx.json"));
    _db = DatastoreDb.Create("projectid");
    Query query = new Query("Sports_db");
    IEnumerable<Entity> stores = _db.RunQuery(query).Entities;
    SportsStoreList = stores.Select(_ => new AllSportsStore
    {
        Name = _["Name"].ToString(),
        Price = _["Price"].ToString(),
    }).ToList();
}

AllSportsStore.cshtml 页

@for (var i = 0; i < Model.SportsStoreList.Count; i++)
{
    <tr>
        <td>
            @Html.DisplayFor(model => model.SportsStoreList[i].Name)
        </td>
        <td>
            @Html.DisplayFor(model => model.SportsStoreList[i].Price)
        </td>
    </tr>
}

这是数据存储的映像

根据评论更新了代码结果

如评论中所述,您试图将错误的类型分配给 SportsStoreList 属性。

有一个模型来保存存储中的实体详细信息

public class SportsStoreItem {
    public string Name { get; set; }
    public decimal Price { get; set; }
}

使用AllSportsStore.cs页面中的模型

public class AllSportsStore : PageModel {

    private readonly DatastoreDb _db;

    public AllSportsStore() {
        _db = DatastoreDb.Create("projectid");
    }

    [BindProperty]
    public List<SportsStoreItem> SportsStoreList { get; set; }

    public IActionResult OnGet() {
        Query query = new Query("Sports_db");
        IEnumerable<Entity> stores = _db.RunQuery(query).Entities;
        SportsStoreList = stores.Select(_ => new SportsStoreItem {
            Name = (string)_["Name"],
            Price = (decimal)_["Price"]
        }).ToList();

        return Page();
    }
}

请注意从数据存储数据库中检索到的实体是如何转换为强类型对象的。

然后您应该能够访问 view/page 中列表中的项目。

@for (var i = 0; i < Model.SportsStoreList.Count; i++) {
    <tr>
        <td>
            @Html.DisplayFor(model => model.SportsStoreList[i].Name)
        </td>
        <td>
            @Html.DisplayFor(model => model.SportsStoreList[i].Price)
        </td>
    </tr>
}