gpt4 book ai didi

c# - LINQ:一起使用 AssociateWith 和 Distinct

转载 作者:太空宇宙 更新时间:2023-11-03 16:58:12 24 4
gpt4 key购买 nike

我还没有找到同时使用这两个元素的方法。

这是我的问题:

一个网页有很多书签。用户拥有书签。用户可以多次为同一页面添加书签(出于我的目的)。

我想要的是已将页面添加为书签的不同用户的列表。我正在尝试使用 DataContextLoadWith()AssociateWith() 方法,因为我不想写每次我想要数据的轻微变体时,一个全新的查询。所以,有时我想要一个页面,有时我想要一个页面和一个书签列表,等等。

我可以使用这样的代码获取页面及其书签:

dlo.LoadWith<Page>(p => p.Bookmarks);

并添加此内容以获取用户:

dlo.LoadWith<Bookmark>(b => b.User); 

但我不知道如何才能将用户限制为不同。我假设它是通过 AssociateWith() 命令实现的,但它不支持 Distinct() 运算符:http://msdn.microsoft.com/en-us/library/bb548919.aspx

我正在做的事情可行吗,还是我必须为其编写新的查询?

最佳答案

假设有两个页面和两个用户,并且两个用户都为两个页面添加了书签。

如果你发布

dlo.LoadWith<Page>(p => p.Bookmarks);
dlo.LoadWith<Bookmark>(b => b.User);
dc.DataLoadOptions = dlo;
List<Page> myPages = dc.Page.ToList();

然后 LinqToSql 将加载 2 个页面、4 个书签和 2 个用户,并构建您期望的对象图。

然后,为了在不访问数据库的情况下获得不同的用户,您必须遍历图形并执行如下操作:

List<User> myUsers = myPages
.SelectMany(p => p.Bookmarks)
.Select(b => b.User)
.Distinct()
.ToList()

a user can bookmark the same page multiple times in this case, so they're not distinct

好的,这是一个未经测试的镜头。

List<PageWithUsers> myPages = dc.Pages
.Select(p => new PageWithUsers()
{
Page = p
Users = p.Bookmarks
.Select(b => b.UserId)
.Distinct()
.Take(10)
.Select(i => dc.Users.Where(u => u.UserId = i))
})
.ToList();

关于c# - LINQ:一起使用 AssociateWith 和 Distinct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/477083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com