我有以下LINQ查询,它选择了一些导航属性的属性。
var nodes = await dbContext.MonProfiles
.Include(x => x.Nodes)
.SelectMany(x =>
x.Nodes.Select(y =>
new {y.NodeNativeId, y.NodeClassId, y.NodeName, y.NodeClass.ClassName}))
.ToListAsync();
我还希望能够选择另一个导航属性的属性,以便它可以单次往返数据库。以下是我尝试过的,但它没有编译:
var nodes = await dbContext.MonProfiles
.Include(x => x.Nodes)
.SelectMany(x =>
new
{
x.Nodes.Select(y =>
new {y.NodeNativeId, y.NodeClassId, y.NodeName, y.NodeClass.ClassName}),
x.CasAttributes.Select(y => new {y.AttributeName})
})
.ToListAsync();
答案 0 :(得分:1)
您的描述有点不清楚,但我认为您想要的是以下内容:
var nodes = await (from profile in dbContext.MonProfiles.Include(x => x.Nodes)
select new {
Nodes = from node in profile.Nodes
select new {
node.NodeNativeId,
node.NodeClassId,
node.NodeName,
node.NodeClassName }
CasAttributes = from attribute in profile.CasAttributes
select attribute.Name
}).ToListAsync();
我不确定这是否适用于您的特定数据库提供程序,但您提供的代码的问题是匿名类型并不知道要用于字段的名称。有时它可以推断它,如果它足够简单(例如,只是访问属性),但是当你调用Select语句或其他东西时,你必须指定字段的名称。