Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linq中的Sql查询_Linq - Fatal编程技术网

Linq中的Sql查询

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

我需要以字符串形式编写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.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构建查询并在最后一刻执行,它将为您构建所有内容,您不必包含任何不必要的内容。在这里查看我的帖子: