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 - Fatal编程技术网

C# 是否可以使用Linq在类内填充集合?

C# 是否可以使用Linq在类内填充集合?,c#,linq,C#,Linq,假设我们有两个班: A: [Key] public long Id {get;set;} public string SomeValueFromAddressTable {get;set;} public string SomeValueFromPersonTable {get;set;} public string SomeValueFromOrderTable {get;set;} public long BId {get;set;} B: [Key] public long Id {ge

假设我们有两个班:

A:
[Key]
public long Id {get;set;}
public string SomeValueFromAddressTable {get;set;}
public string SomeValueFromPersonTable {get;set;}
public string SomeValueFromOrderTable {get;set;}
public long BId {get;set;}

B:
[Key]
public long Id {get;set;}
public IQUerable<A> AList {get;set;}
但它不会编译-如果我更改行:

from c in address select new AddressDTO
以下

from c in user.Addresses select new AddressDTO

然后它将编译,但我认为它不会考虑“where”条件。所以问题是-有可能以某种方式填补我的空缺吗?我希望现在更清楚。

在这种情况下,您可以使用group,例如:

var userQuery = (
                from user in Context.Users
                join address in Context.Address on user.Id equals address.UserId
                where address.IsActive = true
                select new { userId = user.Id, userName = user.Name, addressId = address.Id, address.City, address.Street } into tmp
                group tmp by new { tmp.userId, tmp.userName, adresses = grouped.ToList() } into grouped
                select new UserDto
                {
                    Id = grouped.Key.userId,
                    Name = grouped.Key.userName,
                    AddressList = grouped.Select(c => new AddressDTO
                    {
                        Id = c.addressId,
                        City = c.City,
                        Street = c.Street
                    })
                }).ToList();

你试过构造器吗?不太清楚你的意思。您尝试了什么以及它是如何不起作用的?请展示您尝试了什么,并解释为什么它不能满足您的要求。目前还不清楚为什么您可以执行
obj.AList=new Queue(一些LINQ表达式)
。谢谢,这似乎可以(稍加修改)。。。但是,生成的SQL太复杂了-Linq似乎无法很好地优化此类查询…:(Yee linq即使对于简单的事情也会生成复杂的查询。这是真的:)事实上,我最近设法优化了不少linq查询(我得到了加快同步过程的工作——设法将每个设备的同步时间从45分钟提高到5-6分钟),但“分组”似乎让这变得非常困难(如果不是不可能的话)——我会再试一次。。。
from c in user.Addresses select new AddressDTO
var userQuery = (
                from user in Context.Users
                join address in Context.Address on user.Id equals address.UserId
                where address.IsActive = true
                select new { userId = user.Id, userName = user.Name, addressId = address.Id, address.City, address.Street } into tmp
                group tmp by new { tmp.userId, tmp.userName, adresses = grouped.ToList() } into grouped
                select new UserDto
                {
                    Id = grouped.Key.userId,
                    Name = grouped.Key.userName,
                    AddressList = grouped.Select(c => new AddressDTO
                    {
                        Id = c.addressId,
                        City = c.City,
                        Street = c.Street
                    })
                }).ToList();