Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检索LINQ对象及其所有相关信息?_C#_Linq_Wcf_Linq To Sql - Fatal编程技术网

C# 如何检索LINQ对象及其所有相关信息?

C# 如何检索LINQ对象及其所有相关信息?,c#,linq,wcf,linq-to-sql,C#,Linq,Wcf,Linq To Sql,下面是一个示例模式,其中=>表示一对多关系: 合同=>ContractCustomers 合同=>合同折扣 客户=>ContractCustomers 折扣类型=>合同折扣 我试图通过对服务器的一次调用来检索契约对象及其所有相关细节。 到目前为止,我使用LoadWith: using (Data.ABWXDataContext db = new Data.ABWXDataContext()) { DataLoadOptions optio

下面是一个示例模式,其中=>表示一对多关系: 合同=>ContractCustomers 合同=>合同折扣 客户=>ContractCustomers 折扣类型=>合同折扣 我试图通过对服务器的一次调用来检索契约对象及其所有相关细节。 到目前为止,我使用LoadWith:

 using (Data.ABWXDataContext db = new Data.ABWXDataContext())
            {
                DataLoadOptions options = new DataLoadOptions();
                options.LoadWith<Data.Contract>(c => c.ContractCustomers);
                options.LoadWith<Data.Contract>(c => c.ContractDiscounts);
                options.LoadWith<Data.ContractDiscount>(c => c.DiscountType);
                options.LoadWith<Data.ContractCustomer>(c => c.Customers);
                db.LoadOptions = options;
                var Contract = from con in db.Contracts
                               where con.ContractId == contractId
                               select con;
                return Contract.ToList();
            }
        }
上面的代码可以很好地包含Contract折扣和ContractCustomers表。然而,它并没有让我接触到折扣类型的客户。我知道他们不是合同的孩子,我怎么能带着合同对象陪他们


如果这是一项简单的常见任务,我深表歉意。

您可以添加不从合同开始的加载选项:

请注意,添加许多加载选项可能会导致触发多个查询1+n问题。你必须检查它是否仍然有效。以后按需查询相关数据可能更有效

答案:

我发现了那是什么!Linq to SQL将[DataMember]属性放在子记录上,但不放在父记录上。我必须在关联下添加[DataMember]属性

缺点是,这是对context.designer.cs的手动输入,如果dbml发生更改,将被覆盖:-

[Association(Name="CustomerStatus_Customer", Storage="_CustomerStatus", ThisKey="CustomerStatusId", OtherKey="CustomerStatusId", IsForeignKey=true)]
[DataMember()]
public CustomerStatus CustomerStatus
{
    get
    {
        return this._CustomerStatus.Entity;
    }
    set
    { 
      ...
     }
 }

我会选择var Contract=db.Contracts.Wherec=>c.contractd==contractd;让方法返回IQueryable,但我认为这不能解决你的问题。你能发布你的类的元数据定义吗?我知道,我帮不了你多少忙,但是当涉及到更复杂的查询时,我也有点不知所措,但是使用JOIN可能会使它工作起来。但是不确定语法,您是否尝试过在查询中包含JOIN?看来这是办不到的。然而,使用实体框架是可能的。考虑使用它,因为它有积极的发展。你确定这不会产生任何副作用吗?例如,循环引用,或者在您不需要的时候快速加载。手动更改dbml是一个大问题。你试过我的建议了吗?
[Association(Name="CustomerStatus_Customer", Storage="_CustomerStatus", ThisKey="CustomerStatusId", OtherKey="CustomerStatusId", IsForeignKey=true)]
[DataMember()]
public CustomerStatus CustomerStatus
{
    get
    {
        return this._CustomerStatus.Entity;
    }
    set
    { 
      ...
     }
 }