Linq中的Sql查询
我需要以字符串形式编写sql查询并将其传递给linq,就像ado.net中的ExecuteOnQuery一样 但是我需要从4个表返回数据 查询示例:Linq中的Sql查询,linq,Linq,我需要以字符串形式编写sql查询并将其传递给linq,就像ado.net中的ExecuteOnQuery一样 但是我需要从4个表返回数据 查询示例: SELECT * FROM dbo.GeneralAd INNER JOIN dbo.Category ON dbo.GeneralAd.FkCategoryID = dbo.Category.CategoryID INNER JOIN dbo.District ON dbo.GeneralAd.FkDistrictID = dbo.Distri
SELECT *
FROM dbo.GeneralAd INNER JOIN
dbo.Category ON dbo.GeneralAd.FkCategoryID = dbo.Category.CategoryID INNER JOIN
dbo.District ON dbo.GeneralAd.FkDistrictID = dbo.District.DistrictID LEFT OUTER JOIN
dbo.Users ON dbo.GeneralAd.FkApprovedByID = dbo.Users.UserID AND dbo.GeneralAd.FKAddedByID = dbo.Users.UserID where .........
如何使用linq中的ExecuteOnQuery方法从4个表返回数据?我不知道为什么要从所有表返回所有列。这似乎没有必要。您可以从GeneralAd对象访问District和Category字段 我可能要做的是在通用Ad对象上定义一个属性,该属性执行select以获取关联的用户 如果您确实想在Linq中执行此操作,您可以使用以下内容:
var results = (from ga in DataContext.GeneralAds
select new
{
Col1 = ga.Col1,
Col2 = ga.Category.Col2,
Col3 = ga.District.Col3,
Col4 = (from u in DataContext.Users
where u.UserID = ga.FkApprovedByID AND u.UserID = ga.FKAddedByID
select u.Col4)
});
您可能必须在Col4上添加Any方法:
var results = (from ga in DataContext.GeneralAds
select new
{
Col1 = ga.Col1,
Col2 = ga.Category.Col2,
Col3 = ga.District.Col3,
Col4 = ((from u in DataContext.Users
where u.UserID = ga.FkApprovedByID AND u.UserID = ga.FKAddedByID
select u.Col4).Any() ?
(from u in DataContext.Users
where u.UserID = ga.FkApprovedByID AND u.UserID = ga.FKAddedByID
select u.Col4).First() : -1)
});
您不会使用ExecuteOnQuery,因为它不会返回结果集。您也可以将其作为LINQ查询编写,而无需传递显式SQL语句。@Yuck所说的是正确的,并使用var关键字将自己从返回类型中解脱出来,尽管它通常是IQueryable。好的,在使用var关键字时如何编写if station?非常感谢,我不想返回所有列,这只是一个示例,我需要在搜索时写入查询中的if语句,因为有更多的组合并且会导致性能低下,所以查询将是这样的:declare@x varcharmax set@x='SELECT*FROM dbo.generald internal JOIN。。。。。其中1=1'如果@TITLE!=开始设置@x=@x+'和标题,如%'+@Title+'%'如果@FkADDedBy!=-如果@District!=-1.exec@x我需要在C中以字符串形式而不是@X编写此查询,并将此查询传递给LINK。如果我不能将其作为sql查询,我如何在var关键字中编写if语句。这在LINQ中会更好。由于LINQ构建查询并在最后一刻执行,它将为您构建所有内容,您不必包含任何不必要的内容。在这里查看我的帖子: