gpt4 book ai didi

asp.net - : LINQ To SQL for data access 的最佳实践

转载 作者:行者123 更新时间:2023-12-02 18:45:24 25 4
gpt4 key购买 nike

我正在开发的 Web 应用程序的一部分是一个显示从管理人员到 1...n 个用户的消息的区域。我有一个包含 LINQ to SQL 类的 DataAccess 项目和一个作为 UI 的网站项目。我的数据库如下所示:

用户 -> 消息详细信息 <- 消息 <- 消息类别

MessageDetail 是一个连接表,还包含 IsRead 标志。

消息列表按类别分组。我在页面上有两个嵌套的 ListView 控件——一个输出组名称,而第二个嵌套在其中,绑定(bind)到 MessageDetails 并输出消息本身。在列出消息的页面的代码隐藏中,我有以下代码:

protected void MessageListDataSource_Selecting(object sender, LinqDataSourceSelectEventArgs e)
{
var db = new DataContext();

// parse the input strings from the web form
int categoryIDFilter;
DateTime dateFilter;
string catFilterString = MessagesCategoryFilter.SelectedValue;
string dateFilterString = MessagesDateFilter.SelectedValue;
// TryParse will return default values if parsing is unsuccessful (i.e. if "all" is selected"):
// DateTime.MinValue for dates, 0 for int
DateTime.TryParse(dateFilterString, out dateFilter);
Int32.TryParse(catFilterString, out categoryIDFilter);
bool showRead = MessagesReadFilter.Checked;

var messages =
from detail in db.MessageDetails
where detail.UserID == (int)Session["UserID"]
where detail.Message.IsPublished
where detail.Message.MessageCategoryID == categoryIDFilter || (categoryIDFilter == 0)
where dateFilter == detail.Message.PublishDate.Value.Date || (dateFilter == DateTime.MinValue)
// is unread, showRead filter is on, or message was marked read today
where detail.IsRead == false || showRead || detail.ReadDate.Value.Date == DateTime.Today
orderby detail.Message.PublishDate descending
group detail by detail.Message.MessageCategory into categories
orderby categories.Key.Name
select new
{
MessageCategory = categories.Key,
MessageDetails = categories.Select(d => d)
};

e.Result = messages;
}

这段代码可以工作,但是在 LinqDataSource 控件的代码隐藏中粘贴这样的巨大 LINQ 语句并不适合我。

看起来我仍在将查询编码到用户界面中,只不过现在是 LINQ 而不是 SQL。然而,我认为在 L2S 类和 UI 之间构建另一个层会削弱 LINQ 的一些灵 active 。重点不就是减少为获取数据而编写的代码量吗?

是否有一些我没有看到的可能的中间立场,或者我只是误解了 LINQ to SQL 的使用方式?非常感谢您的建议。

最佳答案

所有 LINQ 查询都应位于业务逻辑类中,与 ADO 等旧方法没有任何变化。

如果您是一个纯粹主义者,您应该始终从业务类中的方法返回List(of T),事实上,数据上下文应该只对业务类可见。然后您可以在用户界面中操作该列表。

如果您是一个实用主义者,您可以返回一个 IQueryable 对象并在用户界面中进行一些操作。

关于asp.net - : LINQ To SQL for data access 的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47374/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com