Linq to sql 返回select linq to sql中的相关对象

Linq to sql 返回select linq to sql中的相关对象,linq-to-sql,associations,Linq To Sql,Associations,我有两个表帐户和地址,具有1:1关系SIP;帐户中有addressid。我已经在dbml文件中创建了关联。现在,我想编写一个查询,为给定的accountid选择帐户,结果帐户中也应该包含address对象 using (var context = new SalesLogixDataClassesDataContext()) { var query = context.ACCOUNTs .Where(a => a.A

我有两个表帐户和地址,具有1:1关系SIP;帐户中有addressid。我已经在dbml文件中创建了关联。现在,我想编写一个查询,为给定的accountid选择帐户,结果帐户中也应该包含address对象

 using (var context = new SalesLogixDataClassesDataContext())
        {
            var query = context.ACCOUNTs
                .Where(a => a.ACCOUNTID == id)
                .Select(a => new Account {AccountId = id, AccountName = a.ACCOUNT1, Address=a.ADDRESS});

            return query.FirstOrDefault();
        }
但返回的对象中的地址为空。那么,我必须在查询中做些什么,以便同时检索address对象呢


编辑:很抱歉,伙计们把你们引向了白费力气。我的关联映射错误(Address.AddressId映射到Account.AccountId)。我把它修好了,现在可以正常工作了。谢谢大家的帮助。

为什么要在select中创建一个新的Account对象,而不是让LINQ->SQL为您处理它?如果让框架选择对象,它应该为属性正确设置EntityRef,并且关联应该有效

using (var context = new SalesLogixDataClassesDataContext())
    {
        var query = context.ACCOUNTs
            .Where(a => a.ACCOUNTID == id);

        return query.FirstOrDefault();
    }
只是一个编辑,如果您选择从生成的名称更改属性名称,您也可以通过DBML设计器执行此操作,因此您得到的对象是友好的,但仍然通过实际的列名保持与表的关系

在第二次检查您的代码时(对不起,我误读了实体的设置),我从原始答案中删除了一些无效文本

下面是一些XML示例,说明如何使模型对象更友好,而不是在查询中手动转换它们

<Table Name="dbo.ACCOUNT" Member="Accounts">
    <Type Name="Account">
      <Column Name="ACCOUNTID" Member="AccountId" Type="System.Int32" DbType="Int NOT NULL" IsPrimaryKey="true" CanBeNull="false" />
      <Column Name="ACCOUNT1" Member="AccountName" Type="System.String" DbType="VarChar(...) NOT NULL" CanBeNull="false" />
      <Association Name="Address_Account" Member="Address" ThisKey="ThisTablesFKIDToAddress" OtherKey="AddressTablePKID" Type="Address" IsForeignKey="true" />
    </Type>
</Table>

仔细查看您配置的对象关系,特别是所涉及的键。不管您是否希望/需要使用自定义对象,只要关系配置正确且数据在数据库中,您提供的查询都将为您获取相关地址

下面是一个示例真实配置,其中StateMaster有一个CustomerMaster1属性(正在清理命名:)


这就是我的想法,根据发布的代码,如果关系正确,Account对象应该具有正确的引用。但也有一些变量,比如account对象正在执行的任何操作,以及从顶级查询返回的对实际linq对象的原始范围引用。是的,我想用一个真实的配置示例发布它,不知怎的,我最初发布的部分内容是这样的:(
using (var context = new SalesLogixDataClassesDataContext())
{
    return context.Accounts.FirstOrDefault(account => account.AccountId == id);
}