我有以下代码,我正在使用实体框架,
abcde1234567890
我不想仅从Products表返回数据,而是想从ProductDetails表中返回数据。
另外,如果我想在这里添加where子句,我该怎么做?
我试过像这样的东西,但它没有用,
public IEnumerable<Product> GetProducts()
{
var query = (from p in db.Products
join pd in db.ProductDetails
on p.ProductID equals pd.ProductID
select new
{
p.ProductName,
pd.IsEnabled
}).ToList();
IEnumerable<Product> products =
db.Products.Include(x => x.ProductDetail).ToList();
return products;
}
public partial class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public System.DateTime CreatedDate { get; set; }
public virtual ProductDetail ProductDetail { get; set; }
}
我该怎么做?
答案 0 :(得分:2)
您可以创建一个自定义类,只保留ProductName
和IsEnabled
,如下所示:
public class ProductEnableInfo
{
public string ProductName { get; set; }
public bool IsEnabled { get; set; }
}
然后您可以将方法更改为:
public IEnumerable<ProductEnableInfo> GetProducts()
{
return db.Products.Select(
x => new ProductEnableInfo
{
ProductName = x.ProductName,
IsEnabled = x.ProductDetail.IsEnabled
})
.ToList();
}
<强>更新强>
您可以按照以下方式按产品ID进行过滤:
public IEnumerable<ProductEnableInfo> GetProducts(int product_id)
{
return db.Products
.Where(x => x.ProductID == product_id)
.Select(
x => new ProductEnableInfo
{
ProductName = x.ProductName,
IsEnabled = x.ProductDetail.IsEnabled
})
.ToList();
}
答案 1 :(得分:1)
您可以创建DTO
对象并使用Select()
方法,您可以更改查询的输出,样本:
public class ProductDto
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsEnalbed { get; set; }
}
并执行这样的查询;
IEnumerable<ProductDto> result = db.Products
.Where(x => x.ProductId == productId) // if you want to filter, just add .Where() method
.Select(x => new ProductDto()
{
Id = x.ProductID,
Name = x.ProductName,
IsEnabled = x.ProductDetail.IsEnabled
})
.ToList();
答案 2 :(得分:1)
这应该是给你你需要的东西。
public IEnumerable<Product> GetProducts()
{
IEnumerable<Product> products =
db.Products.Include(x => x.ProductDetail).ToList();
return products;
}
访问IsEnabled
属性,您只需引用ProductDetail属性
var products = GetProducts();
foreach (var product in products)
{
bool enabled = product.ProductDetail.IsEnabled;
}