您好我正在尝试将载体添加到我的朋友模型中,但我不确定该怎么做。
这是我的模特:
public class FriendModel
{
public int? Id { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "Last Name")]
public string LastName { get; set; }
[Required]
[StringLength(10)]
[Display(Name = "Phone Name")]
public string PhoneNumber { get; set; }
public List<CarriersModel> Carriers { get; set; }
public int UserId { get; set; }
public int? SelectedCarrier { get; set; }
}
这是我的代码:
var query = from f in db.Friends
join uf in db.Users_Friends on f.Id equals uf.FriendId
join c in db.Carriers on f.CarrierId equals c.Id
select new {Friends = f, Users_Friends = uf, Carrier = c};
var friends = new List<FriendModel>();
foreach (var row in query)
{
friends.AddRange(query.Select(friend => new FriendModel()
{
Id = friend.Friends.Id,
FirstName = friend.Friends.FirstName,
LastName = friend.Friends.LastName,
PhoneNumber = friend.Friends.PhoneNumber,
UserId = friend.Friends.Id,
Carriers = new List<CarriersModel>()
{
CarrierName = friend.Carrier.CarrierName,
CarrierEmail = friend.Carrier.CarrierEmail,
}
}
));
}
当我尝试像上面代码中那样添加运营商时,它会出错。 (无法解析符号)。这不是这样做的方法吗?
答案 0 :(得分:1)
而不是
Carriers = new List<CarriersModel>()
{
CarrierName = friend.Carrier.CarrierName,
CarrierEmail = friend.Carrier.CarrierEmail,
}
尝试
Carriers = new List<CarriersModel>()
{
new CarriersModel(){
CarrierName = friend.Carrier.CarrierName,
CarrierEmail = friend.Carrier.CarrierEmail,
},
}
更新: 也许改变你的foreach循环以使其更有意义
foreach (var row in query)
{
friends.Add(new FriendModel()
{
Id = row.Friends.Id,
FirstName = row.Friends.FirstName,
LastName = row.Friends.LastName,
PhoneNumber = row.Friends.PhoneNumber,
UserId = row.Friends.Id,
Carriers = new List<CarriersModel>()
{
new CarriersModel(){
CarrierName = row.Carrier.CarrierName,
CarrierEmail = row.Carrier.CarrierEmail,
}
}
});
}
答案 1 :(得分:0)
我认为你不能列出清单。尝试使用IEnumerable,并使用它:
... snip ...
UserId = friend.Friends.Id,
Carriers = friend.Carrier.Select(c => new CarriersModel
{
CarrierName = c.CarrierName,
CarrierEmail = c.CarrierEmail,
})
etc
在您的模型中,您应该
public IEnumerable<CarriersModel> Carriers { get; set; }
顺便说一句,您不需要执行foreach (var row in query)
- 选择将迭代所有行。你可以:
var friends = query.Select(<insert select here>)
.ToList();
答案 2 :(得分:0)
我不熟悉Linq to SQL,但这应该有效:
List<FriendModel> friendModels = (from f in db.Friends
join uf in db.Users_Friends on f.Id equals uf.FriendId
join c in db.Carriers on f.CarrierId equals c.Id
select new FriendModel()
{
Id = f.Id
FirstName = f.FirstName,
LastName = f.LastName,
PhoneNumber = f.PhoneNumber,
UserId = f.Id,
Carriers = c.Select(i=> new CarriersModel() { CarrierName = i.Name, CarrierEmail = i.CarrierEmail })
}).ToList();