在列表中添加从linq到sql查询的列表

时间:2014-01-02 00:51:46

标签: c# asp.net-mvc linq-to-sql

您好我正在尝试将载体添加到我的朋友模型中,但我不确定该怎么做。

这是我的模特:

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,
                    }
                }
                ));
            }

当我尝试像上面代码中那样添加运营商时,它会出错。 (无法解析符号)。这不是这样做的方法吗?

3 个答案:

答案 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();
相关问题