LINQ Guid toString()
嗨,这似乎应该工作,
from something in collectionofsomestuff select new SelectListItem(){Text = something.Name, Value = something.SomeGuid.ToString(), Selected = false};
当我尝试这样做时它不起作用给我错误
LINQ to Entities无法识别方法’System.String ToString()’方法,并且此方法无法转换为存储表达式。
有解决方法吗?
并非所有CLR方法都可以与Linq-to-Entities一起使用。 ToString()似乎就是其中之一。
看一下CLR方法到Canonical Function Mapping 。
也许尝试在Linq之外明确地将GUID设置为字符串变量。
string myGuid = SomeGuid.ToString(); from something in collectionofsomestuff select new SelectListItem(){Text = Name, Value = myGuid, Selected = false};
您可以在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};
我不太清楚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 })
我最后做了这样的foreach
List list = new List (); foreach (SomeThing something in collectionofsomestuff) { list.Add(new SelectListItem(){Text = something.Name,Selected = false,Value = something.SomeGuid.ToString()}); }
这是我能让它发挥作用的唯一方法..这不是我希望做的艰难……
为SelectListItem创建一个构造函数,它接受你的Value作为Guid并在那里ToString它。 现在调用您的查询:
from something in collectionofsomestuff select new SelectListItem(something.Name, something.SomeGuid, false);
我遇到了同样的问题,最后我改变了对象的定义以解决问题。 这是一个完整的黑客,但它允许我直接从查询填充数据:
[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变得更加容易。