我创建了一个应用程序,其中用户可以根据国家/地区的规范访问应用程序,并且单个用户可以是多个国家/地区的成员。 因此,我创建了两个表,一个用于用户的详细信息,另一个用于存储国家/地区表。
我尝试过的表格设计:-
1 st 表(Users table):- UserID (Primary Key), Name, EmailId, UserRole
2 nd 表(Country table) :- UserId (foreign key),CountryId (primary key), Country_name
我已经创建了ASP.NET MVC
GET
和POST
api并且在单个Get Request (api/GetUser(id))
中,我希望可以获取该用户的全部数据
通过在这两个表之间使用联接查询。
代码:-
public IQueryable<tblUserRecord> GettblUserRecords()
{
var query = (from g in db.tblUserRecords
join u in db.tblCountryNames on g.UserId equals u.UserId
select new { g, u, });
return query;
}
我遇到的问题/错误:-
严重性代码描述项目文件行抑制状态 错误CS0266无法隐式转换类型 'System.Linq.IQueryable <>'到 'System.Linq.IQueryable'。一个明确的 转换存在(您是否缺少演员表?)
为解决上述问题,我尝试将函数的返回类型更改为List<tblUserRecord>
,也将return query
更改为return query.toList()
。但是什么都没有
注意:-在创建实体模型时,我选择了两个表。
答案 0 :(得分:0)
如果要同时返回tblUserRecord
模型和tblCountryName
模型中的数据,则可以创建包装模型来保存此数据,并让您的方法返回该数据。可能看起来像:
public class UserAndCountry
{
public tblUserRecord UserRecord {get; set;}
public tblCountryName CountryRecord {get; set;}
}
然后,查询数据的方法如下:
public IQueryable<UserAndCountry> GettblUserRecords()
{
var query = (from g in db.tblUserRecords
join u in db.tblCountryNames on g.UserId equals u.UserId
select new UserAndCountry { UserRecord = g, CountryRecord = u });
return query;
}
要详细说明您收到的错误,这并不是因为您提到的返回IQueryable
与List
而引起的。之所以发生这种情况,是因为您要选择一个匿名对象来构建IQueryable
,但是您的方法将返回类型定义为IQueryable<tblUserRecord>
。
还要注意,按照惯例,类名通常是.NET中的大写驼峰