首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用simple.odata.client扩展分层数据

如何用simple.odata.client扩展分层数据
EN

Stack Overflow用户
提问于 2015-03-23 09:43:46
回答 1查看 4.5K关注 0票数 3

在我们的数据模型中,我们有分层数据。例如,我们有以下结构:

代码语言:javascript
复制
Product  : Category       (one to many)
Category : CategoryType   (one to many)

如果我们想拥有某个产品的相关类别以及每个类别的相关类别类型,我们可以使用这样的url来构建这个类别:

代码语言:javascript
复制
<urlbase>/Products(1)?$expand=Category($expand=CategoryType)

这在浏览器中运行得很好。问题是如何在simple.odata.client OData v4中做到这一点?我们正在尝试这一点,但并没有让它发挥作用:

代码语言:javascript
复制
var client = new ODataClient(ConfigSettingsProvider.ODataBaseUri);
var client
    .For<Product>()
    .Filter(p=> p.Id == 1)
    .Expand(p => p.Categories)
    .Expand(c => c.CategoryTypes)
    .FindEntriesAsync();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-27 08:42:29

请检查包含非类型化、类型化和动态版本的Simple.OData.Client测试:

未输入:https://github.com/object/Simple.OData.Client/blob/master/Simple.OData.Client.Tests.Net40/FindTests.cs

代码语言:javascript
复制
[Fact]
public async Task ExpandOne()
{
var product = (await _client
  .For("Products")
  .OrderBy("ProductID")
  .Expand("Category")
  .FindEntriesAsync()).Last();

Assert.Equal("Condiments", (product["Category"] as IDictionary<string, object>)["CategoryName"]);
}
[Fact]
public async Task ExpandMany()
{
var category = await _client
  .For("Categories")
  .Expand("Products")
  .Filter("CategoryName eq 'Beverages'")
  .FindEntryAsync();

Assert.Equal(12, (category["Products"] as IEnumerable<object>).Count());
}
[Fact]
public async Task ExpandSecondLevel()
{
var product = (await _client
  .For("Products")
  .OrderBy("ProductID")
  .Expand("Category/Products")
  .FindEntriesAsync()).Last();

Assert.Equal(12, ((product["Category"] as IDictionary<string, object>)["Products"] as IEnumerable<object>).Count());
}

输入:https://github.com/object/Simple.OData.Client/blob/master/Simple.OData.Client.Tests.Net40/FindTypedTests.cs

代码语言:javascript
复制
 [Fact]
public async Task ExpandOne()
{
var product = (await _client
  .For<Product>()
  .OrderBy(x => x.ProductID)
  .Expand(x => x.Category)
  .FindEntriesAsync()).Last();

Assert.Equal("Condiments", product.Category.CategoryName);
}
[Fact]
public async Task ExpandManyAsArray()
{
var category = await _client
  .For<Category>()
  .Expand(x => x.Products)
  .Filter(x => x.CategoryName == "Beverages")
  .FindEntryAsync();

Assert.Equal(12, category.Products.Count());
}
[Fact]
public async Task ExpandManyAsList()
{
var category = await _client
  .For<CategoryWithList>("Categories")
  .Expand(x => x.Products)
  .Filter(x => x.CategoryName == "Beverages")
  .FindEntryAsync();

Assert.Equal(12, category.Products.Count());
}
[Fact]
public async Task ExpandManyAsIList()
{
var category = await _client
  .For<CategoryWithIList>("Categories")
  .Expand(x => x.Products)
  .Filter(x => x.CategoryName == "Beverages")
  .FindEntryAsync();

Assert.Equal(12, category.Products.Count());
}
[Fact]
public async Task ExpandManyAsICollection()
{
var category = await _client
  .For<CategoryWithICollection>("Categories")
  .Expand(x => x.Products)
  .Filter(x => x.CategoryName == "Beverages")
  .FindEntryAsync();

Assert.Equal(12, category.Products.Count());
}
[Fact]
public async Task ExpandSecondLevel()
{
var product = (await _client
  .For<Product>()
  .OrderBy(x => x.ProductID)
  .Expand(x => x.Category.Products)
  .FindEntriesAsync()).Last();

Assert.Equal(12, product.Category.Products.Length);
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29207080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档