尝试为以下SQL获取linq查询(或lambda语法),选择连接表中具有等于“blob”的属性的所有“数据”。
除了:没有明确地使用Join,而是
select data.*
from data
join settings on data.DataID = settings.DataID
where settings.Attribute = 'blob'
明确定义连接
from d in dbcontext.Data
join s in dbcontext.Settings on d.DataID equals s.DataID
where s.Attribute == "blob"
select d
但有没有办法使用上下文dbcontext.Data.Settings 喜欢以下几个?
from d in dbcontext.Data
where d.Settings.Attribute == "blob"
select d
设置是一个集合类型,因此会出现像.Contains和.Where这样的内容。
使用.Contains,我的理解是我需要传入一个对象类型
where d.Settings.Contains(new Settings(d.DataID, "blob", null))
但我不关心null(Value)匹配,只关注列设置
一些表结构
Data
DataID
Name
Settings
DataID
Attribute
Value
答案 0 :(得分:0)
如果我正确理解你的问题,你想创建一个LINQ,它将获取任何属性为“Blah”的DataID,该DataID存储在另一个表中。
如果是这样,这可能会奏效。
var dataIDs = Setting.Where(entry => entry.Attribute == "Blah")
.Select(entry => entry.DataID); // gets all DataIDs that match the attribute
var data = Data.Where(entry => entry.DataID in dataIDs); // gets data info based on DataIDs.
它应该可以工作,但你应该做的是做一个左连接,有点像
select a.*
from data a
left join settings b
on a.DataID = b.DataID
where b.Attribute = 'blob'
但在LINQ中。此查询将允许您获取与属性'blob匹配的DataID的所有数据。我还没有在LINQ中完成它,所以如果有人更熟悉左边加入linq就可以做出更好的反应