Выбор нескольких столбцов с помощью запроса 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
}

нет необходимости объявлять "контакт"