是否可以使用 Linq 在 class 中填充集合?
Is it possible to fill collection within a class using 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 {get;set;}
public IQUerable<A> AList {get;set;}
表示从数据库 table 中获取一些数据的 Dbo 对象(它们不是精确的数据库实体表示)- 是否可以在 Linq 语句中填充 AList 变量?我尝试使用一些技术,但似乎无法实现我想要的。
编辑:
好的,请允许我再解释一下:
我有标准数据库,其中 - 例如 - 用户 table 具有指向地址和其他一些 table 的外键。我只想以 DTO 的形式从这些 table 中获取一些数据(例如 User.Id、User.Name、User.Address.City、User.Address.Street),用户可以拥有许多地址(一对多关系)。我创建了两个 DTO 类:
UserDto:
[Key]
public long Id {get;set;}
public string Name {get;set;}
public IQuerable<AddressDTO> AddressList {get;set;}
AddressDTO:
[Key]
public long Id {get;set;}
public string City {get;set;}
public string Street {get;set;}
我试过这样的事情:
var userQuery =
from user in Context.Users
join address in Context.Address on user.Id equals address .UserId
where address.IsActive=true
select new UserDto
{
Id = user.Id,
Name = user.Name,
AddressList = (from c in address select new AddressDTO
{
Id = c.Id,
City = c.City,
Street = c.Street
}).AsQuerable()
}
但它不会编译 - 如果我更改行:
from c in address select new AddressDTO
以下
from c in user.Addresses select new AddressDTO
然后它会编译,但我认为它不会考虑 "where" 条件。所以问题是——是否有可能以某种方式填补我的空缺?我希望现在更清楚了。
您可以在这种情况下使用群组,例如:
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();
假设我们有两个 类:
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;}
表示从数据库 table 中获取一些数据的 Dbo 对象(它们不是精确的数据库实体表示)- 是否可以在 Linq 语句中填充 AList 变量?我尝试使用一些技术,但似乎无法实现我想要的。
编辑:
好的,请允许我再解释一下:
我有标准数据库,其中 - 例如 - 用户 table 具有指向地址和其他一些 table 的外键。我只想以 DTO 的形式从这些 table 中获取一些数据(例如 User.Id、User.Name、User.Address.City、User.Address.Street),用户可以拥有许多地址(一对多关系)。我创建了两个 DTO 类:
UserDto:
[Key]
public long Id {get;set;}
public string Name {get;set;}
public IQuerable<AddressDTO> AddressList {get;set;}
AddressDTO:
[Key]
public long Id {get;set;}
public string City {get;set;}
public string Street {get;set;}
我试过这样的事情:
var userQuery =
from user in Context.Users
join address in Context.Address on user.Id equals address .UserId
where address.IsActive=true
select new UserDto
{
Id = user.Id,
Name = user.Name,
AddressList = (from c in address select new AddressDTO
{
Id = c.Id,
City = c.City,
Street = c.Street
}).AsQuerable()
}
但它不会编译 - 如果我更改行:
from c in address select new AddressDTO
以下
from c in user.Addresses select new AddressDTO
然后它会编译,但我认为它不会考虑 "where" 条件。所以问题是——是否有可能以某种方式填补我的空缺?我希望现在更清楚了。
您可以在这种情况下使用群组,例如:
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();