it-swarm.com.de

Auswählen mehrerer Spalten mit linq-Abfrage und Lambda-Ausdruck

Ich bin neu in C # ASP.NET und arbeite an meiner ersten Anwendung.

Ich versuche, eine linq-Anweisung zu erstellen, die eine Arrarierung zurückgibt.

Ich habe eine Produkttabelle. Ich möchte in der Lage sein, Name, ID und Preis für jedes Produkt auszuwählen, dessen Status == 1 ist.

Ich habe Schwierigkeiten damit, eine Möglichkeit zu finden, dies zu tun ... Ich konnte nur einzelne Artikel/Spalten zurückgeben. Ich bin auf diesem Weg zu lange festgeblieben.

Das habe ich bisher:

try
{
  using (UserDataDataContext db = new UserDataDataContext())
  {
    return db.mrobProducts.Select(x => x.Name).OrderBy(x => x).ToArray();
  }
}

Wenn Sie in der Abbildung unten nachsehen, können Sie sehen, dass ich 2 Fehler habe, Select = Type-Objekt kann nicht von seiner Verwendung referenziert werden ToArray = Symbol kann nicht in Array aufgelöst werden

enter image description here

12
Mark

Nicht sicher, wie Ihre Tabellenstruktur aussieht, siehe unten.

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

Dies würde ein Array des Typs anonym mit den gewünschten Mitgliedern zurückgeben.

Update:

Erstellen Sie eine neue Klasse.

public class NamePriceModel 
{
    public string Name {get; set;}
    public decimal? Price {get; set;}
    public int Id {get; set;}
}

Ich habe die Abfrage oben geändert, um dies ebenfalls zurückzugeben, und Sie sollten Ihre Methode ändern, indem Sie string[] in NamePriceModel[] zurückgeben.

26
scartag

Sie können verwenden:

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

Und hier ist YourClass Implementierung:

public class YourClass
{
  public string Name {get; set;}
  public int ID {get; set;}
  public int Price {get; set;}
}

Der Rückgabetyp Ihrer AllProducts-Methode muss YourClass[] sein.

10
Farhad Jabiyev

mit LINQ und Lamba wollte ich zwei Feldwerte zurückgeben und sie einem einzelnen Objektobjekt zuordnen.

als Name = Fname + "" + LName;

Siehe meinen Code, der wie erwartet funktioniert. hoffe das ist nützlich;

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
}

keine Notwendigkeit, den 'Kontakt' anzugeben

3
        Object AccountObject = _dbContext.Accounts
                                   .Join(_dbContext.Users, acc => acc.AccountId, usr => usr.AccountId, (acc, usr) => new { acc, usr })
                                   .Where(x => x.usr.EmailAddress == key1)
                                   .Where(x => x.usr.Hash == key2)
                                   .Select(x => new { AccountId = x.acc.AccountId, Name = x.acc.Name })
                                   .SingleOrDefault();