我有两张桌子:
User {
PK: UserId
...
}
Product {
PK: ProductId,
FK: UserId
...
}
我有一个随机格式的ProductId
列表。我不想对输出结果进行排序,我也希望为每个产品ID包含用户数据。
以下代码以排序格式提供数据。我怎样才能避免这种排序?我希望对象列表与我们的产品列表的顺序相同。
List<Tables.Product> tblProductList =
repo.Products
.Include("User")
.Where(x => productIdList.Contains(x.ProductId))
.ToList();
答案 0 :(得分:2)
我希望对象列表与产品列表的顺序相同。
我假设我们的产品列表是指用于过滤的productIdList
变量。
你不能在LINQ to Entities中这样做,所以你必须切换到LINQ to Objects并在内存中进行排序。
一种方法是使用IndexOf
方法:
var tblProductList =
repo.Products
.Include("User")
.Where(x => productIdList.Contains(x.ProductId))
.AsEnumerable() // Switch to LINQ to Objects context
.OrderBy(x => productIdList.IndexOf(x.ProductId))
.ToList();
另一个更高效的方法(当productIdList
很大时)可以使用中间字典:
var productsById =
repo.Products
.Include("User")
.Where(x => productIdList.Contains(x.ProductId))
.ToDictionary(x => x.ProductId);
var tblProductList = productIdList
.Select(productId => productsById[productId])
.ToList();
答案 1 :(得分:-1)
var tblProductList=(from product in repo.Products
join user in repo.Users on product.UserId equals user.UserId
select new { Product=product,User=user}).toList();