首页 > 解决方案 > 如何使用 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;
            }

标签: c#entity-frameworklinqwebforms

解决方案


您不能访问本地范围之外的匿名类型。

匿名类型只能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;
    }
}

推荐阅读