嗨,这似乎应该可行,
from something in collectionofsomestuff
select new SelectListItem(){Text = something.Name, Value = something.SomeGuid.ToString(), Selected = false};
当我尝试这样做时,它不起作用给我错误
LINQ to Entities无法识别方法'System.String ToString()'方法,并且此方法无法转换为商店表达式。
有解决方法吗?
答案 0 :(得分:6)
并非所有CLR方法都可以与Linq-to-Entities一起使用。 ToString()似乎就是其中之一。
看看CLR Method to Canonical Function Mapping。
也许尝试在Linq之外明确地将GUID设置为字符串变量。
string myGuid = SomeGuid.ToString();
from something in collectionofsomestuff
select new SelectListItem(){Text = Name, Value = myGuid, Selected = false};
答案 1 :(得分:5)
您可以在db中获取记录,然后使用ToList()或ToArray()将它们转换为列表或数组。然后使用该对象。 例如(它是LINQ to Entities):
var list = collectionofsomestuff.select(c => c).ToList();
from something in list
select new SelectListItem(){Text = something.Name, Value = something.SomeGuid.ToString(), Selected = false};
答案 2 :(得分:4)
我不太了解Linq查询表达式,但以下应该可以解决这个问题:
collectionofsomestuff //here it's LinqToEntities
.Select(something=>new{something.Name,something.SomeGuid})
.ToArray() //From here on it's LinqToObjects
.Select(s=>new SelectListItem()
{
Text = s.Name,
Value = s.SomeGuid.ToString(),
Selected = false
})
答案 3 :(得分:1)
我最终做了这样的foreach
List<SelectListItem> list = new List<SelectListItem>();
foreach (SomeThing something in collectionofsomestuff)
{
list.Add(new SelectListItem(){Text = something.Name,Selected = false,Value = something.SomeGuid.ToString()});
}
这是我能让它发挥作用的唯一方法..这不是我希望做的事情......
答案 4 :(得分:1)
为SelectListItem创建一个构造函数,该构造函数接受您的Value作为Guid并在那里ToString它。现在调用您的查询:
from something in collectionofsomestuff select new SelectListItem(something.Name, something.SomeGuid, false);
答案 5 :(得分:1)
我遇到了同样的问题,最后我改变了对象的定义以解决问题。这是一个完整的黑客,但它允许我直接从查询填充数据:
[DataContract]
public class DeviceInfo
{
public Guid DeviceGuid
{
set
{
DeviceID = value.ToString();
}
}
[DataMember]
public string DeviceID { get; set; }
}
该查询按设计工作,因为它还有其他东西在进行转换:
devices.AddRange(from d in ae.UserDevices
select new DeviceInfo
{
DeviceGuid = d.DeviceID
}
它使对象变得更加混乱,但在查询中处理Guid变得更加容易。