web-dev-qa-db-ja.com

LINQクエリとラムダ式を使用して複数の列を選択する

私はC#ASP.NETが初めてで、最初のアプリケーションに取り組んでいます。

私はarraryを返すlinqステートメントを作成しようとしています。

製品の表があります。ステータス== 1の製品ごとに、名前、ID、価格を選択できるようにしたいと思います。

これを行う方法の作成に苦労しています。個々のアイテム/列のみを返すことができました。私は長い間この方法にこだわっています。

これは私がこれまでに持っているものです:

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

下のスクリーンショットを見ると、2つのエラーがあります。Select= Typeオブジェクトはその使用法から参照できませんToArray =シンボルを配列に解決できません

enter image description here

13
Mark

テーブル構造がどのようなものかはわかりませんが、以下を参照してください。

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

これは、必要なメンバーを持つ匿名型の配列を返します。

更新:

新しいクラスを作成します。

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

これも返すように上記のクエリを変更しました。メソッドをstring[]からNamePriceModel[]に戻すように変更する必要があります。

29
scartag

次を使用できます。

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[]でなければなりません。

11
Farhad Jabiyev

lINQとLambaを使用して、2つのフィールド値を返し、単一のエンティティオブジェクトフィールドに割り当てたいと思いました。

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

「連絡先」を宣言する必要はありません

4
        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();