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变得更加容易。