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

Mar*_*ark 13 c# sql linq asp.net

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

我正在尝试创建一个返回arrary的linq语句.

我有一张产品表.我希望能够为状态== 1的每个产品选择名称,ID和价格.

我正在努力设法做到这一点.我只能返回单个项目/列.我一直坚持这种方式.

这是我到目前为止:

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

如果你看下面的屏幕截图,你可以看到我有2个错误,Select = Type对象无法从它的用法中提到ToArray = cant解​​析符号到数组

在此输入图像描述

sca*_*tag 29

不确定你的表结构是什么样的,但见下文.

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;
     }
 }
Run Code Online (Sandbox Code Playgroud)

这将返回一个匿名类型数组,其中包含您需要的成员.

更新:

创建一个新类.

public class NamePriceModel 
{
    public string Name {get; set;}
    public decimal? Price {get; set;}
    public int Id {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我已经修改了上面的查询以返回它,你应该改变你的方法从返回string[]到返回NamePriceModel[].


Far*_*yev 12

您可以使用:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是YourClass实施:

public class YourClass
{
  public string Name {get; set;}
  public int ID {get; set;}
  public int Price {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

并且您的AllProducts方法的返回类型必须是YourClass[].


小智 5

我想使用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
}
Run Code Online (Sandbox Code Playgroud)

无需声明“联系人”