将select linq中的相关对象返回给sql
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将select linq中的相关对象返回给sql相关的知识,希望对你有一定的参考价值。
我有2个表帐户和地址,有1:1关系;帐户中有地址。我在dbml文件中创建了关联。现在我想写一个查询来选择给定accountid的帐户,结果帐户也应该包含地址对象。
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();
}
但是返回的对象中的地址为null。那么我在查询中需要做什么才能检索地址对象。
编辑:对不起你们带领你们去追逐野鹅。我将关联映射错误(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>
你可以通过设计师做到这一点,这将更容易,也使你的地址对象更好用。
无论如何,我希望这有任何帮助,我不能确定设置实体是怎么回事,如果你想发布它可能有帮助的帐户对象的代码,但它会给我们一个地方去这里。
当然,如果您要更改建模对象,则选择代码看起来更像是:
using (var context = new SalesLogixDataClassesDataContext())
{
return context.Accounts.FirstOrDefault(account => account.AccountId == id);
}
仔细查看已配置的对象关系,特别是涉及的密钥。无论是否需要使用自定义对象,只要关系配置正确并且数据位于数据库中,您提供的查询就会获得相关地址。
这是一个示例真实生活配置,其中StateMaster具有CustomerMasters1属性(正在清理命名:)
以上是关于将select linq中的相关对象返回给sql的主要内容,如果未能解决你的问题,请参考以下文章
LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg (转)
如何将相同的 var 类型变量分配给不同的 linq to sql 结果集?
将@@ rowcount分配给SQL Server存储过程中的变量