问题描述
我正在尝试对本地sqlite数据库使用Linq查询来分配Picker ItemsSource属性。但是,我得到的是“ {{Page_Title = Test 1}” 而不是Test 1。 其中:
Page_Title是sqlite表中的列名
测试1是我想要返回的值
我假设得到的原因是因为我使用列表而不是字符串。但是,当我尝试使用列表时,出现以下错误:
CS0029:无法将类型“ System.Collections.Generic.List匿名类型:字符串Page_Title”隐式转换为“ System.Collections.Generic.List字符串”
我尝试使用.ConvertAll转换字符串,但确实删除了 {Page_Title =} 仅返回测试1,但它作为每个字符作为列表中的一项返回。如下:
“ T”
“ e”
“ s”
“ t”
“ 1”
带有对象的代码
VM_AnalyzePage CurrentPage = new VM_AnalyzePage();
var Pagelist = (from UserPageTbl in conn.Table<UserPageTbl>()
where UserPageTbl.User_ID == App.user
select new
{
UserPageTbl.Page_Title
}).distinct().OrderBy(Page_Title => Page_Title).ToList<object>();
CurrentPage.Pagelist = Pagelist;
带字符串的代码
var Pagelist = (from UserPageTbl in conn.Table<UserPageTbl>()
where UserPageTbl.User_ID == App.user
select new
{
UserPageTbl.Page_Title
}).distinct().OrderBy(Page_Title => Page_Title).ToList();
CurrentPage.Pagelist = Pagelist;
这是我要设置其值的类。注意,当我尝试转换为字符串时,在下面将“ object”更改为“ string”:
public class VM_AnalyzePage : INotifyPropertyChanged
{
//properties
private List<object> Pagelist;
public List<object> Pagelist
{
get
{
return Pagelist;
}
set
{
Pagelist = value;
}
}
我还尝试过在下面投射“ Pagelist”变量以键入List字符串,但是随后出现相同的错误:
List<string> Pagelist = (from UserPageTbl in conn.Table<UserPageTbl>()
where UserPageTbl.User_ID == App.user
select new
{
UserPageTbl.Page_Title
}).distinct().OrderBy(Page_Title => Page_Title).ToList();
CurrentPage.Pagelist = Pagelist;
解决方法
我能够通过将SQL语句替换为真正的LINQ语句来克服:
List<string> pageList = conn.Table<UserPageTbl>().Where(t => t.User_ID == App.user).Select(t=>t.Page_Title).Distinct().ToList();