C# 为什么赢了';t实体框架允许我做一个.FindBy….()

C# 为什么赢了';t实体框架允许我做一个.FindBy….(),c#,linq-to-sql,entity-framework,linq-to-entities,C#,Linq To Sql,Entity Framework,Linq To Entities,我使用我的数据库创建了一个EDM,并看到它能够像 Customers.First().Orders 没有比这更好的了 Customer.First().Orders.FindOrderByOrderID() Customer.First().Orders.FindOrderByOrderName() 等等 也许我希望它是那样的,但这就是它不起作用的原因 我可能只需要LINQ到实体并创建管理器来处理实体中的业务逻辑 或者LINQ to SQL可以做到这一点吗?您可以将LINQ与Orders属

我使用我的数据库创建了一个EDM,并看到它能够像

Customers.First().Orders
没有比这更好的了

Customer.First().Orders.FindOrderByOrderID()

Customer.First().Orders.FindOrderByOrderName()
等等

也许我希望它是那样的,但这就是它不起作用的原因 我可能只需要LINQ到实体并创建管理器来处理实体中的业务逻辑


或者LINQ to SQL可以做到这一点吗?

您可以将LINQ与
Orders
属性一起使用,如下所示:

var order = Customer.First().Orders.FirstOrDefault(o => o.OrderId == someId);

如果没有与LINQ to Entities匹配的
订单

,则返回null。您可以这样做。例如上面张贴的示例SLaks

如果您有冒险精神,可以编写一个函数来实现这一点。由于实体框架知道哪个列是主键,所以可以编写类似GetEntityByPrimaryKey的函数


CodeProject有一个函数,如果您搜索“SelectByKey”,您将看到它的实现。我使用了一些类似的东西,发现它非常有用。

这个想法是,您可以使用LINQ编写更灵活的查询。但是,请注意,通过创建自己的动态类型(不平凡),您可能会在.NET 4.0中创建类似于
FindOrderByOrderName
的东西,该类型通过自动构建LINQ查询来响应遵循此模式的调用。当然,您将失去intellisense,我怀疑这是否值得,但这是可以做到的。

如果必须这样做,我可能会使用自定义T4模板来完成。这更容易,而且你也有智能感知。奥托,我可能觉得不值得这么做,因为我宁愿去看林肯。