如何使用 LINQ return 来自数据库的两个特定列?
How to return two specific columns from database using LINQ?
我有 table 称为资产。它有很多列。我只想select其中两个,分开使用。
这两列都是字符串。
Linq 查询:
public static List<string> GetAssetIdsWithNames()
{
using (var db = DbManager.Get())
{
var result = db.Assets.SelectMany(i=> new[] { i.AssetName, i.AssetId }).Distinct().ToList();
return result;
}
}
我想在哪里使用它们:
var assetList = AssetManager.GetAssetIdsWithNames();
//CURRENCYBOX IS A DROPDOWN
CurrencyBox.DataSource = assetList;
CurrencyBox.DataBind();
foreach (var item in assetList)
{
CurrencyBox.DataValueField = //asset id goes here
CurrencyBox.DataTextField =//asset name goes here
break;
}
您无法访问本地范围之外的匿名类型。
匿名类型只能作为 Object
在其本地范围之外返回,并通过反射检查其属性。
因此在这种情况下,您最好使用类型化数据协定并从您的资产实体映射,然后从您的调用方法访问它。
您对 SelectMany
的使用似乎也很奇怪,您可能更喜欢 Select
。
public class AssetDto
{
public string Name { get;set; }
public string Id { get; set; }
}
public static List<AssetDto> GetAssetIdsWithNames()
{
using (var db = DbManager.Get())
{
var result = db.Assets.Select(i=> new AssetDto { Name = i.AssetName, Id = i.AssetId }).ToList();
return result;
}
}
您可以为此使用命名值元组,这样您就不需要创建额外的 class
public static List<(string Name, int Id)> GetAssetWithIds()
{
using (var db = DbManager.Get())
{
var result = db.Assets
.Select(a => new { a.AssetName, a.AssetId })
.Distinct().AsEnumerable()
.Select(a => (a.AssetName, a.AssetId))
.ToList();
return result;
}
}
您需要添加 System.ValueTuple
我有 table 称为资产。它有很多列。我只想select其中两个,分开使用。 这两列都是字符串。
Linq 查询:
public static List<string> GetAssetIdsWithNames()
{
using (var db = DbManager.Get())
{
var result = db.Assets.SelectMany(i=> new[] { i.AssetName, i.AssetId }).Distinct().ToList();
return result;
}
}
我想在哪里使用它们:
var assetList = AssetManager.GetAssetIdsWithNames();
//CURRENCYBOX IS A DROPDOWN
CurrencyBox.DataSource = assetList;
CurrencyBox.DataBind();
foreach (var item in assetList)
{
CurrencyBox.DataValueField = //asset id goes here
CurrencyBox.DataTextField =//asset name goes here
break;
}
您无法访问本地范围之外的匿名类型。
匿名类型只能作为 Object
在其本地范围之外返回,并通过反射检查其属性。
因此在这种情况下,您最好使用类型化数据协定并从您的资产实体映射,然后从您的调用方法访问它。
您对 SelectMany
的使用似乎也很奇怪,您可能更喜欢 Select
。
public class AssetDto
{
public string Name { get;set; }
public string Id { get; set; }
}
public static List<AssetDto> GetAssetIdsWithNames()
{
using (var db = DbManager.Get())
{
var result = db.Assets.Select(i=> new AssetDto { Name = i.AssetName, Id = i.AssetId }).ToList();
return result;
}
}
您可以为此使用命名值元组,这样您就不需要创建额外的 class
public static List<(string Name, int Id)> GetAssetWithIds()
{
using (var db = DbManager.Get())
{
var result = db.Assets
.Select(a => new { a.AssetName, a.AssetId })
.Distinct().AsEnumerable()
.Select(a => (a.AssetName, a.AssetId))
.ToList();
return result;
}
}
您需要添加 System.ValueTuple