正确地使用了一些基于Linq to SQL和MVC的精神博客。
让基本的MVC和L2SQL正常运行。
所以例如
User (Table)
UserId
UserName
Call (Table)
CallId
UserId
CountryId
Country(Table)
CountryID
CountryName
所以我想只获得具有特定国家/地区的用户的电话?
视图 - 基于Call Object,因为这是“详细信息”视图 -
如何获取UserName和CountryName并仍然维护基于Call的视图?
似乎我仍然需要创建一个Object CallForUserByCountry - 但这会变得混乱 在保存时,CallForUserByCountry对象还需要实现如何创建呼叫用户和国家。
linq查询
var calls = from c in db.Call
where c.CountryID == id
select new CallForUserByCountry or new something// this is bit that suggests a new object.
希望我错过了一些东西......
答案 0 :(得分:2)
如果Call数据类与User和Call数据类有关联,您可以直接在View中访问Call的User和Country属性。您也可以立即从相关的User和Country表加载数据(而不是默认延迟加载):
在控制器中:
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Call>(x => x.User);
options.LoadWith<Call>(x => x.Country);
db.LoadOptions = options;
var calls = from c in db.Call
where c.Country.CountryName == countryName && c.User.UserName == userName
select c;
在视图中:
<%= Model.User.UserName %>
<%= Model.Country.CountryName %>
答案 1 :(得分:0)
您可以使用TempData包并在那里保存用户名和国家名称。
控制器中的: TempData [“CountryName”] = countryName;
答案 2 :(得分:0)
如果我正确理解了这一点,那么您正试图接收来自特定国家/地区的特定用户的电话。如果是这种情况,那么只要您在Linq2SQL设计器中映射了关系,那么您应该能够从调用中访问用户和国家/地区作为属性。所以它会是这样的:
var userName = call.User.UserName;
正如我所说,这取决于设计器中映射的关系,否则Linq2SQL将没有迹象表明这两个表是相关的。
您还可以使用单独的查询来根据用户和国家/地区获取所需的电话:
var calls = from c in db.Call
where c.User.UserID = userID
&& c.Country.CountryID == countryID
select c;
答案 3 :(得分:0)
您的问题可以采取两种方式。
您想使用当前的呼叫详细信息视图显示呼叫列表。 - 这需要一个新视图。除非详细信息视图是ViewUserControl。然后你可以使用PartialRender。
您想要将额外数据添加到当前的详细信息视图中 - 将额外数据添加到ViewData。
对于2号,您可以执行以下操作。
我更喜欢使用连接,我喜欢使用与DataContext分离的对象。所以通常我的对象中没有额外的IQueryable。
我仍然会使用CallForUserByCountry对象。使事情变得冗长。
var calls = from call in db.Calls
join country in db.Countries on call.CountryId equals country.CountryID
join user in db.Users on call.UserId equals user.UserId
where user.UserName == userName && country.CountryName == countryName
select new CallForUserByCountry
{
UserName = user.UserName,
CountryName = country.CountryName,
Call = call
};
View["CallsForUserByCountry"] = calls.ToList();
In the view.
<% foreach(var callForUserByCountry in (IList<CallForUserByCountry>)ViewData["CallsForUserByCountry"]) { %>
.. Do stuff here .. I like using PartialRendering
<% Html.PartialRender("CallForUserByCountryDetail", callForUserByCountry); %>
<%}