编辑:这是实体数据类
public abstract class EntityData : ITableData
{
protected EntityData();
public DateTimeOffset? CreatedAt { get; set; }
public bool Deleted { get; set; }
[Key]
public string Id { get; set; }
public DateTimeOffset? UpdatedAt { get; set; }
public byte[] Version { get; set; }
}
我有一个看起来像这样的销售模型
public class Sale : EntityData
{
public string StoreId { get; set; }
[StringLength(255)]
public string Remarks { get; set; }
public string SaleTransactionId { get; set; }
public virtual Store Store { get; set; }
}
我使用LINQ语句来获取所有内容,但我也试图从PartNumber
表中获取Products
private MobileServiceContext context;
var query = context.Sales
.Where(s =>
(String.IsNullOrEmpty(storeName) || s.Store.StoreName.Contains(storeName)) &&
(String.IsNullOrEmpty(productPartNumber) || s.Product.PartNumber.Contains(productPartNumber)) &&
(String.IsNullOrEmpty(remarks) || s.Remarks.Contains(remarks)) &&
(String.IsNullOrEmpty(saletransactionId) || s.SaleTransactionId.Contains(saletransactionId)) );
在没有声明PartNumber
的情况下,有没有办法从Products
获取public virtual Product Product { get; set; }
?
.Inlude()
,但没有运气
答案 0 :(得分:0)
您提出的方式有点令人困惑。
每次销售都有许多产品,通常不只是一种。
我猜你的SaleTransactionId是你的销售的唯一标识符,它实际上是一个Guid。如果是这种情况,则应将其称为SaleId,否则您的对象应称为SaleTransaction。这样你的意图很明确,你知道每个领域代表什么。
这通常是使用Code第一种方法的缺点之一。
无论如何,继续前进,您需要能够将销售链接到产品或产品列表,所以是的,您需要在Sale对象中使用它。
我不明白您的SaleTransactionId如何为空或空。当然它总是填充,否则就不会成为交易。
答案 1 :(得分:0)
我明白了。只需添加.Include
即可 var query = context.Sales
.Include(p => p.Product)
.Where(s =>
(String.IsNullOrEmpty(storeName) || s.Store.StoreName.Contains(storeName)) &&
(String.IsNullOrEmpty(productPartNumber) || s.Product.PartNumber.Contains(productPartNumber)) &&
(String.IsNullOrEmpty(remarks) || s.Remarks.Contains(remarks)) &&
(String.IsNullOrEmpty(saletransactionId) || s.SaleTransactionId.Contains(saletransactionId)));