我是C#ASP.NET的新手,正在开发我的第一个应用程序。
我正在尝试创建一个返回档案的linq语句。
我有一张产品表。我希望能够为状态== 1的每个产品选择名称,ID和价格。
我正在努力设法做到这一点。 我只能返回单个项目/列。我一直坚持这种方式。
这是我到目前为止所做的:
try
{
using (UserDataDataContext db = new UserDataDataContext())
{
return db.mrobProducts.Select(x => x.Name).OrderBy(x => x).ToArray();
}
}
如果您查看下面的屏幕截图,您可以看到我有2个错误, Select = Type对象不能用于它的用法 ToArray =无法将符号解析为数组
答案 0 :(得分:26)
不确定你的表结构是什么样的,但见下文。
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[]
。
答案 1 :(得分:11)
您可以使用:
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[]
。
答案 2 :(得分:3)
使用LINQ和Lamba,我想返回两个字段值并将其分配给单个实体对象字段;
名称= Fname +&#34; &#34; + 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
}
无需声明&#39;联系人&#39;
答案 3 :(得分:0)
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();