我正在使用一些具有关系的遗留表,但这些关系尚未明确设置为主键/外键.我使用"Linq To Sql Classes"创建了一个.dbml文件,并建立了正确的Case.CaseID = CaseInfo.CaseID关联.我得到的类是CasesDataContext.
我的桌子(一对多):
Case ------------------ CaseID (int not null) MetaColumn1 (varchar) MetaColumn2 (varchar) MetaColumn3 (varchar) ... CaseInfo ------------------ CaseInfoID (int) CaseID (int nulls allowed) CaseInfoMeta (varchar) ...
我是LinqToSQL的新手,我很难做到......
CasesDataContext db = new CasesDataContext(); var Cases = from c in db.Cases where c.CaseInfo.CaseInfoMeta == "some value" select c;
(编辑)我的问题是CaseInfo或CaseInfos不能作为Cases的成员.
我从一位同事那里听说我可能会尝试ADO.Net实体数据模型来创建我的数据上下文类,但还没有尝试过,想看看我是在浪费时间还是应该走另一条路线.任何提示,链接,帮助将非常感激.
返回设计器并检查关系是否设置正确.这是一个真实的例子,BillStateMasters具有"CustomerMasters1"属性(该州的客户): alt text http://i43.tinypic.com/ohl00l.jpg
PS.正在清理命名......
更新1:您还需要确保两个表都已定义主要.如果未在数据库上定义主键(并且无法以任何原因定义),请确保在设计器中定义它们.打开列的属性,并将其设置为主键.也就是说,如果您没有实体的主键,实体跟踪也将无法工作,对于删除意味着它实际上不会更新实体.因此,请务必检查所有实体并使用主键(如我所说,如果它不能在db上,那么在设计器上).
CasesDataContext db = new CasesDataContext(); var Cases = from c in db.Cases join ci in db.CaseInfo on ci.ID equals c.InfoID where ci.CaseInfoMeta == "some value" select new {CASE=c, INFO=ci};
我的"加入"linq有点生疏,但上面应该接近你所追求的.