Выбор нескольких столбцов с помощью запроса linq и выражения лямбда
Я новичок в С# ASP.NET и работаю над своим первым приложением.
Я пытаюсь создать элемент linq, который возвращает arrary.
У меня есть таблица продуктов. Я хочу иметь возможность выбирать имя, идентификатор и цену для каждого продукта, где статус == 1.
Я изо всех сил пытаюсь сделать способ сделать это.
Я только смог вернуть отдельные элементы/столбцы. Я долго задерживался на этом пути.
Это то, что у меня есть до сих пор:
try
{
using (UserDataDataContext db = new UserDataDataContext())
{
return db.mrobProducts.Select(x => x.Name).OrderBy(x => x).ToArray();
}
}
Если вы посмотрите на снимок экрана ниже, вы увидите, что у меня есть 2 ошибки,
Select = Тип объекта нельзя ссылаться на его использование
ToArray = не разрешить символ для массива
![enter image description here]()
Ответы
Ответ 1
Не уверен, какова структура вашей таблицы, но смотрите ниже.
public NamePriceModel[] AllProducts()
{
try
{
using (UserDataDataContext db = new UserDataDataContext())
{
return db.mrobProducts.Where(x => x.Status == 1).Select(x => new NamePriceModel { Name = x.Name, Id = x.Id, Price = x.Price}).OrderBy(x => x.Id).ToArray();
}
}
catch
{
return null;
}
}
Это вернет массив типа анонимный с членами, которые вам нужны.
Update:
Создайте новый класс.
public class NamePriceModel
{
public string Name {get; set;}
public decimal? Price {get; set;}
public int Id {get; set;}
}
Я также изменил указанный выше запрос, чтобы вернуть его, и вы должны изменить свой метод на возврат string[]
на возврат NamePriceModel[]
.
Ответ 2
Вы можете использовать:
public YourClass[] AllProducts()
{
try
{
using (UserDataDataContext db = new UserDataDataContext())
{
return db.mrobProducts.Where(x => x.Status == 1)
.OrderBy(x => x.ID)
.Select(x => new YourClass { ID = x.ID, Name = x.Name, Price = x.Price})
.ToArray();
}
}
catch
{
return null;
}
}
И вот реализация YourClass
:
public class YourClass
{
public string Name {get; set;}
public int ID {get; set;}
public int Price {get; set;}
}
И ваш тип возврата метода AllProducts
должен быть YourClass[]
.
Ответ 3
используя LINQ и Lamba, я хотел вернуть два значения поля и присвоить их одному объекту объекта объекта;
как Name = Fname + "" + LName;
Смотрите мой ниже код, который работает как ожидалось; надеюсь, что это полезно;
Myentity objMyEntity = new Myentity
{
id = obj.Id,
Name = contxt.Vendors.Where(v => v.PQS_ID == obj.Id).Select(v=> new { contact = v.Fname + " " + v.LName}).Single().contact
}
нет необходимости объявлять "контакт"