Объединить два разных списка объектов в один - PullRequest
0 голосов
/ 18 апреля 2019
{
    "food": [
        {
            "ID": 65,
            "Name": "Grilled chicken",
            "Price": "580",
            "CatID": 75,
            "UID": 101,
            "Date_Time": "2019-04-01T00:00:00",
            "FoodDescription": "Chicken with some oregeno",
            "CookingTime": "25 min"
},
        {
            "ID": 67,
            "Name": "Chicken manchurian",
            "Price": "480",
            "CatID": 77,
            "UID": 101,
            "Date_Time": "2019-04-01T00:00:00",
            "FoodDescription": "fried chicken balls in manchurian sauce",
            "CookingTime": "1 hour 20 min"
}
    ],
    "rate": [
        {
            "ID": 34,
            "Name": "Seekh Kabab",
            "Price": "700",
            "CatID": 47,
            "UID": 102,
            "Date_Time": "2019-01-08T00:00:00",
            "FoodDescription": "Seekh kabab with pakistani Masala and Garlic Sauce.",
            "CookingTime": "3 Hours"}
    ]
}

Я не хочу, чтобы мой JSON вернулся так.Я хочу добиться этого

 {
            "ID": 65,
            "Name": "Grilled chicken",
            "Price": "580",
            "CatID": 75,
            "UID": 101,
            "Date_Time": "2019-04-01T00:00:00",
            "FoodDescription": "Chicken with some oregeno",
            "CookingTime": "25 min"
},
        {
            "ID": 67,
            "Name": "Chicken manchurian",
            "Price": "480",
            "CatID": 77,
            "UID": 101,
            "Date_Time": "2019-04-01T00:00:00",
            "FoodDescription": "fried chicken balls in manchurian sauce",
            "CookingTime": "1 hour 20 min"
},

        {
            "ID": 34,
            "Name": "Seekh Kabab",
            "Price": "700",
            "CatID": 47,
            "UID": 102,
            "Date_Time": "2019-01-08T00:00:00",
            "FoodDescription": "Seekh kabab with pakistani Masala and Garlic Sauce.",
            "CookingTime": "3 Hours"}
    ]
}

С помощью этого кода на C # я получаю эти данные, пожалуйста, помогите мне в этом, я новичок в кодировании.Заранее спасибо.

public HttpResponseMessage recommendfood(int id)
        {

            List<int> order_track = db.Order_Trackings.Where(e => e.UID == id).Select(q => q.ID).ToList();
            List<Food> rates= db.Foods.OrderByDescending(f => f.Ratings.Max(r => r.Rate)).ToList();


            if (order_track.Count==0)
            {
                var rate = rates.Take(4).Distinct();
                return Request.CreateResponse(HttpStatusCode.OK, rate);
            }
          List<int> fidList = db.OrderFoods.Where(q => order_track.Contains(q.OID)).Select(q => q.FID).ToList();
            var qs = (from x in fidList
                      group x by x into g
                      let count = g.Count()
                      orderby count descending
                      select new { KEY = g.Key });


            if (order_track.Count == 1)
            {
                var one = qs.Take(1);

                List<int> idList = new List<int>();
                foreach (var val in one)
                {
                    idList.Add(val.KEY);
                }
                var foodQuery = db.Foods.Where(row => idList.Contains(row.ID));
                var rateQuery = rates.Where(row => !foodQuery.Any(food => food.ID == row.ID)).Take(3);
                var result = new
                {
                    food = foodQuery,
                    rate = rateQuery
                };

                return Request.CreateResponse(HttpStatusCode.OK, result);
            }
            if (order_track.Count == 2)
            {
                var two = qs.Take(2);
                List<int> idList = new List<int>();
                foreach (var val in two)
                {
                    idList.Add(val.KEY);
                }
                var foodQuery = db.Foods.Where(row => idList.Contains(row.ID));
                var rateQuery = rates.Where(row => !foodQuery.Any(food => food.ID == row.ID)).Take(2);
                var result = new
                {
                    food = foodQuery,
                    rate = rateQuery
                };
                return Request.CreateResponse(HttpStatusCode.OK, result);
            }
            if (order_track.Count >= 3)
            {
                var three = qs.Take(3);
                List<int> idList = new List<int>();
                foreach (var val in three)
                {
                    idList.Add(val.KEY);
                }
                var foodQuery = db.Foods.Where(row => idList.Contains(row.ID));
                var rateQuery = rates.Where(row => !foodQuery.Any(food => food.ID == row.ID)).Take(1);
                var result = new
                {
                    food = foodQuery,
                    rate = rateQuery
                };

                return Request.CreateResponse(HttpStatusCode.OK,result);
            }

            return Request.CreateResponse(HttpStatusCode.InternalServerError,"Sorry Something Bad Happend");
        }
    }

Я пытался использовать concat, но это исключение: невозможно создать постоянное значение типа **.В этом контенте поддерживаются только примитивные типы перечислимого типа.

1 Ответ

0 голосов
/ 18 апреля 2019

Поскольку типы одинаковы, вы можете просто объединить их. Обратите внимание, что вам нужно с готовностью выполнить запросы перед выполнением конкатенации.

var foods = db.Foods.Where(row => idList.Contains(row.ID)).ToArray();
var rates = rates.Where(row => !foodQuery.Any(food => food.ID == row.ID)).Take(2).ToArray();

var result = new List<Food>(foods.Concat(rates));
return Request.CreateResponse(HttpStatusCode.OK, result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...