c# - 如何使用 LINQ 从数据库中返回两个特定列?
问题描述
我有一个名为 Asset 的表。它有很多列。我只想选择其中两个并单独使用它们。这两列都是字符串。
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;
}
}
推荐阅读
- ios - Mac:zsh:找不到命令:-s /(失败:将 iOS 备份重定向到外部硬盘)
- javascript - 更改 amCharts 饼图切片的颜色
- r - 您可以在 ggplot2 绘图的轴上反向缩放和居中吗?
- artificial-intelligence - 使用对话流的员工计划机器人
- html - Fullcalendar v5.7.0,星期模式下天数不分界线
- java - 在 git log 中搜索文件的所有版本需要很长时间
- python - 读取文件:没有这样的文件或目录
- python - 从容器中删除 blob 时如何在 python 中对 Azure PartialBatchErrorException 进行异常处理
- gcc - 如何防止 gcc 将空函数编译到相同的地址
- nginx - 无法在 nginx 中加载 nginx-rtmp-module