- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想在我编写的通用 MVC View 中显示一些名为 CriminalEvent
的实体。 View 要求传递给它的模型应实现 IDataModel
接口(interface)。现在,CriminalEvent
具有实现此接口(interface)的属性,但名称不同,我无法更改它。
所以在我的代码中,我继承了 CriminalEvent
并且我的派生类(也称为 CriminalEvent,我猜很愚蠢,但允许我避免许多代码更改......)具有显式接口(interface)代码:
Using ViewApp;
public interface IDataModel
{
int ID { get; set; }
int CriminalEventID { get; set; }
}
public class ViewCriminalEvent : AIM.Police.DB.CriminalEvent, IDataModel
{
int IDataModel.ID
{
get { return CriminalEventID; }
set { CriminalEventID = value; }
}
}
(我知道,在这种情况下接口(interface)的 ID 属性等于 CriminalEventID,没关系)
我希望能够读取 AIM.Police.DB.CriminalEvent
实体并通过 Linq to Entities Cast()ing 将它们填充到派生的 CriminalEvent
,像这样:
View 模型(我需要填充 CriminalEvents
属性):
Using ViewApp;
public class CriminalEventMainViewModel
{
public IEnumerable<IDataModel> CriminalEvents { get; set; }
public IDataModel SelectedEntity { get; set; }
public string SubEntityDisplayName { get; set; }
public IEnumerable<IDataModel> SubEntityCollection { get; set; }
public IDataModel SelectedSubEntity { get; set; }
}
和 Controller 代码:
Using ViewApp;
private ViewResult CriminalEventIndexView(CriminalEvent selectedCriminalEvent = null)
{
CriminalEventMainViewModel viewModel =
new CriminalEventMainViewModel();
using (var db1 = new AIM.Police.DB.InvestigationContext(lazyLoadingEnabled: false))
{
viewModel.CriminalEvents = db1.CriminalEvents.Cast<ViewCriminalEvent>().ToList(); // THIS LINE THROWS THE EXCEPTION
viewModel.SelectedEntity = selectedCriminalEvent;
}
return View("Index", (object)viewModel);
}
请注意原始的 CriminalEvent
类和 InvestigationContext
都在我无法触及的 AIM.Police.DB dll 中找到
错误:
无法将类型“AIM.Police.DB.CriminalEvent”转换为类型“InvestigationSimulator.Models.CriminalEvent”。 LINQ to Entities 仅支持转换 EDM 原语或枚举类型。
为什么会出现此错误?随时欢迎对我的方法发表评论。
最佳答案
由于您获得了所有实体,您可以先具体化查询,然后执行转换。
这将在内存中执行 Cast,而不是尝试将其表述为查询翻译的一部分。出现错误是因为 LINQ to Entities 不支持将 SQL 转换为非实体类,即使它继承自实体类,因为没有将附加列映射到 SELECT
语句.通过具体化数据,然后在内存中执行 Cast
(LINQ to Objects),可以避免转换错误。
但是,在您的情况下,您需要向后继承才能使其工作。为了让它工作,我建议让数据库模型实现 IDataModel
并完全避免强制转换,请参阅 http://msdn.microsoft.com/en-us/library/vstudio/bb738696(v=vs.100).aspx和 http://msdn.microsoft.com/en-us/library/wa80x488.aspx .特别是,您的部分类可以实现接口(interface)(老实说,不记得设计者是否允许您添加接口(interface)定义,因为这些天我只做代码优先)。请注意,这可能会完全消除对 View 特定模型的需求。
viewModel.CriminalEvents = db1.CriminalEvents.ToList();
我可能会做的替代方案是保持 View 模型完全独立(不让它从实体类继承)并使用 AutoMapper 在它们之间进行映射。
var criminalEvents = db1.CriminalEvents.ToList();
viewModel.CriminalEvents = Mapper.Map<CriminalEventViewModel>(criminalEvents);
关于c# - Cast() 异常 : LINQ to Entities only supports casting EDM primitive or enumeration types,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20860396/
我很确定我不会是第一个被这个绊倒的人,但我找不到答案。这是作业。 class Tier{} class Fisch extends Tier{} class Vogel extends Tier{}
在接收器开发人员指南中如下: Applications running on the Google Cast receiver device (receiver applications) are a
最近我制作了一个自定义本地 Flask 网站,用于从本地设备转换到连接到我的电视的 RPi4。有一个 GUI它也可以通过 GET 请求控制,这是转换工作的主要方式,实际上是通过 GET 请求将数据从
最近我因为某些原因重置了我的路由器,所以当我尝试将它连接到 chromecast 时,Chromecast 没有在其列表中列出我的 wifi 名称。 之前它工作正常,所以我选择其他并手动输入我的网络名
做这样的 Actor 阵容的好方法是什么? seq { yield (box "key", box "val") } |> Seq.cast 因为这看起来非常难看: seq { yield (box
我继承的遗留 Web 应用程序是在经典 ASP 中为新西兰乐施会定制编写的,它在用户提交的输入上运行字符串替换,删除字符串“cast”,大概是因为 cast 函数。 然而,这意味着我们的参与者都不能拥
我去了三星网站并下载了 Media Control SDK 包。当我在我的 Galaxy S3 Android 4.3 上使用 AllShare Cast 视频播放器时,我的智能电视(在同一网络中)出
如何在 BigQuery 中查看 INT64 的二进制表示形式?将其转换为 BYTES 类型也可以。 最佳答案 正如@Elliot Brossard 所述,INT64 如何执行是一个实现问题。类型表示
Google 的文档要求我们设置自己的网络服务器来托管 receiver.html。 是否有任何人都可以使用的默认公共(public) chrome-cast 接收器? 我只需要非常基本的接收器,与
我在 Eclipse 3.6 (Helios) 中运行某人的代码时遇到问题。代码是用 OpenJDK 7 编写的。我运行的是 Windows 7,我必须为它安装 Java 7。我之前使用的是 Java
所以我有一些 COM 类型,它们的名称很难记住、又长又笨重,所以如果可以避免的话,我宁愿在从对象进行转换时不必键入它们。使用 Seq.cast 它将推断所需的类型并根据需要进行强制转换。 这是一个用
假设您不关心编译器和机器的转换风格,以下之间是否存在明显差异: #include #include #include static int64_t tosigned (void *p) {
我的测试类 XString 有两个转换运算符。但是编译器不会为 fooA 使用显式转换 operator const wchar_t*()。为什么? class XString { public:
我有以下代码: T imageCollectionItem; // This checks if image actually exists, if it doesn't it gets the ne
这有点假设,因为我不太担心性能 - 只是想知道一般来说哪个选项实际上最快/最有效,或者是否没有任何区别。 假设我有以下支持重载的访问者模板代码: #define IMPLEMENT_VISITOR_W
我目前正在存储复选框的真/假状态。在注册表中检查值以在下次加载表单时重置。 加载表单时,我获取值并像这样设置复选框。 string value = (string)Registry.GetValue(
enum Gender { Male, Female } var k = new[] { Gender.Male }.Cast().ToList().Cast().ToList(); //alrigh
我正在按照 https://codelabs.developers.google.com/codelabs/cast-receiver#0 上的教程构建一个 chrome cast 自定义接收器。我无
我看不懂以下作品 SELECT price, CAST(price AS DECIMAL(10,2)) FROM orders; 但是更新失败: UPDATE orders SET price = C
在 Cast v3 中,如何手动更改“停止转换”按钮的颜色? 我可以为其他所有内容更改转换对话框或媒体路由器的样式,但“停止转换”按钮似乎会根据背景颜色切换为黑色/蓝色。 我的主题:
我是一名优秀的程序员,十分优秀!