我的视图中有ItemsSource="{Binding GetValues, Mode=TwoWay}"
的DataGrid。
在我的ViewModel中: private List getValues = new List();
public List<Language> GetValues
{
get { return getValues; }
set { SetField("GetValues", ref getValues, value); }
}
在这种情况下,一切都很好:
DatabaseDataContext myDB = new DatabaseDataContext();
var query = myDB.Languages.Where(u => u.Valid == true).ToList();
GetValues = query;
但是我想在我的DataGrid中只有一列,所以尝试了这个:
DatabaseDataContext myDB = new DatabaseDataContext();
var query = myDB.Languages
.Where(u => u.Valid == true)
.Select(u => new { Name = u.Title });
GetValues = query.ToList();
&#34;无法隐式转换类型 &#39;&System.Collections.Generic.List LT;&GT;&#39;至 &#39; System.Collections.Generic.List&#39;&#34;
有解决这个问题的好方法吗?
答案 0 :(得分:0)
问题是query returns a anonymous object
,您尝试将此匿名对象列表分配到语言类型列表。
解决方案更改您的Linq query to select a object of type Language
而不是匿名对象。
这必须帮助
var query = myDB.Languages
.Where(u => u.Valid == true)
.Select(u => new Language { Title = u.Title });
然后当您对.ToList()
进行GetValues
时,app.config['JSON_AS_ASCII'] = False
的结果和数据类型将匹配。
答案 1 :(得分:0)
您收到错误,因为GetValues
的类型为List<Language>
,但您尝试将其设置为动态创建的匿名类型。要解决此问题,您应该创建一个代表所需数据的新类。
public class LanguageTitle
{
public string Name { get; set; }
// Other needed properties
}
然后将属性添加到视图模型中:
public List<LanguageTitle> LanguageTitles
{
get { return languageTitles; }
set { SetField("GetLanguageTitles", ref languageTitles, value); }
}
在您的查询中选择LanguageTitle
:
DatabaseDataContext myDB = new DatabaseDataContext();
var query = myDB.Languages
.Where(u => u.Valid == true)
.Select(u => new LanguageTitle { Name = u.Title });
LanguageTitles = query.ToList();
并将DataGrid
绑定到此媒体资源:
ItemsSource="{Binding LanguageTitles, Mode=TwoWay}"
答案 2 :(得分:0)
为什么会有一个对象:
public List<Language> GetValues
{
get { return getValues; }
set { SetField("GetValues", ref getValues, value); }
}
但您不希望从该对象填充所有属性。这是一个不好的做法,所以重新使用对象因为它们几乎相似。 您可能希望将属性GetValues更改为
public List<string> GetValues {get;set;}
然后在您的linq查询中,您可以使用:
GetValues = myDB.Languages
.Where(u => u.Valid == true)
.Select(u => u.Title)
.ToList();