使用LINQ返回连接字符串以进行下拉

这是从这个问题开始:格式列表< T>连接字段。答案是正确的,但是回复后我想从方法中返回
List
,以便可以重复使用。我得到了这个,但这是不正确的(因为我知道
Iqueryable
不正确,它只是防止
AnonymousType
错误):
public static IQueryable GetCitiesInCountryWithState(string isoalpha2)
    {
        const string delimiter = ", ";
        using (var ctx = new atomicEntities())
        {
            var query = (from c in ctx.Cities
                        join ctry in ctx.Countries on c.CountryId equals ctry.CountryId
                        where ctry.IsoAlpha2 == isoalpha2
                        select new
                                   {
                                       CityId = c.CountryId,
                                       CityName = c.CityName + delimiter + c.State
                                   });
            return query;
        }
    }
我想能够在这里返回一个
List<string>
(如果可能的话)然后在UI上做这样的事情:
ddlCity.DataSource = GetCitiesInCountryWithState(Session["BusinessCountry"].ToString());
            ddlCity.DataTextField = "CityName";
            ddlCity.DataValueField = "CityId";
            ddlCity.DataBind();
我尝试了各种各样的但没有运气。我知道我已经很亲密 - 但需要帮助!帮助赞赏:)     
已邀请:
您可以选择以下选项: 在您的City实体上,我假设您有EDM工具生成的部分类的一部分,并且您可能有部分类的另一部分包含不是来自EDM生成的代码。 在部分类的非生成部分中,您可以添加一个瞬态属性,该属性将CityName和State作为只读字符串(参见下文)。瞬态意味着该属性不会持久保存到数据库,并且通常是从某些现有字段生成的。在ViewModels中使用了这种技术,为视图提供了更多UI友好的属性。
public partial class City
{
    public string CityNameAndState
    {
        get
        {
            return CityName + delimiter + State;
        }
    }
}
然后,您可以将其用作绑定中City对象的DataTextField。如果你走这条路,我不认为你在查询中需要一个匿名类型 - 你可以按原样返回City对象。这样做的好处与从查询返回自定义对象的好处是,如果在类上定义属性,您将始终拥有它,无论您使用什么查询来检索城市,它都将始终有效。 希望有意义......我对你的项目设置做了一些假设。     
你不能返回一个匿名类型,编译器无法维护类型安全。 所以如果你定义一个类
class City {
  public int CityId {get; set;}
  public string CityName {get; set;}
}
将select new {}替换为select new City {}并返回List&lt; City&gt;或IQueryable&lt; City&gt;你应该没事。     
为了扩大你的克里斯所说的话。
class City 
{
   public int CityId {get; set;}
   public string CityName {get; set;}
} 然后
public static List<City> GetCitiesInCountryWithState(string isoalpha2)
{
    const string delimiter = ", ";
    using (var ctx = new atomicEntities())
    {
        var query = (from c in ctx.Cities
                    join ctry in ctx.Countries on c.CountryId equals ctry.CountryId
                    where ctry.IsoAlpha2 == isoalpha2
                    select new City
                               {
                                   CityId = c.CountryId,
                                   CityName = c.CityName + delimiter + c.State
                               }).ToList();
        return query;
    }
}


var cityList = GetCitiesInCountryWithState(Session["BusinessCountry"].ToString());
ddlCity.DataSource = cityList;
ddlCity.DataTextField = "CityName";
ddlCity.DataValueField = "CityId";
ddlCity.DataBind();
    

要回复问题请先登录注册