我的应用程序是.net Core MVC。我有两个班级
public class Product
{
public int Id { get; set; }
public string Buyer { get; set; }
public int? ProductId { get; set; }
public ProductType ProductType { get; set; }
}
public class ProductType
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public ICollection<Product> Product { get; set; }
}
我正在尝试使用以下内容生成产品名称列表:
List<ProductType> productnames;
var products = _context.Product().Where(x => x.Buyer == "Test" && x.ProductId != null).ToList();
foreach (var item in products)
{
productnames = _context.ProductType.Where(c => c.ProductId == item.ProductId).ToList();
}
虽然列表(产品)中有3个项目,但我在产品名称列表中只有一个项目。
注意:我不能使用Include,因为我正在使用另一个Core Web API来检索数据 不能使用oData返回IQueryable对象。所以我是一个解决方法 使用Sqlite作为客户端应用程序,而API正在使用MS SQL。
答案 0 :(得分:1)
您只能获得一个项目(这将是上一次迭代的值),因为您在每次迭代中都会覆盖productnames
的值。
您需要将结果添加到列表中。假设您的.Where(c => c.ProductId == item.ProductId)
只返回一条记录,那么您可以使用.Single()
,例如
foreach (var item in products)
{
productnames.Add(_context.ProductType.Single(c => c.ProductId == item.ProductId));
}
但是,您可以使用.Contains()
语句
// Select just the ProductId
var products = _context.Product
.Where(x => x.Buyer == "Test" && x.ProductId != null)
.Select(x => x.ProductId);
List<ProductType> productnames = _context.ProductType
.Where(x => products.Contains(x.ProductId)).ToList();