繁体   English   中英

使用linq查询和lambda表达式选择多个列

[英]Selecting multiple columns with linq query and lambda expression

我是C#ASP.NET的新手,正在开发我的第一个应用程序。

我正在尝试创建一个linq语句,该语句返回一个arrary。

我有一张产品表。 我希望能够为状态== 1的每种产品选择名称,编号和价格。

我正在努力制定一种方法来做到这一点。 我只能退回单个项目/列。 我一直被困在这个很久以前。

这是我到目前为止的内容:

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

如果您在下面的屏幕快照中查看,您会看到我有2个错误,Select =无法从其用法中引用Type对象ToArray =无法将符号解析为数组

在此处输入图片说明

不确定您的表结构是什么样,但请参见下文。

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[]

您可以使用:

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[]

我想使用LINQ和Lamba,返回两个字段值并将其分配给单个实体对象字段;

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
}

无需声明“联系人”

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM