我正在使用LINQ来查询数据.考虑一个用户只想报告3个字段中的1个字段的情况?(见下文)
谁能告诉我如何动态构建查询?
谢谢
DD
var query =
from cl in db.tblClaims
join cs in db.tblCases
on cl.ref_no equals cs.ref_no
where cl.claim_status == "Appeal"
&& cl.appeal_date >= Convert.ToDateTime(txtReferedFromDate.Text)
&& cl.appeal_date <= Convert.ToDateTime(txtReferedToDate.Text)
&& cs.referred_from_lho == dlLHO.Text
&& cs.adviser == dlAdviser.Text
select new
{
Ref = cs.ref_no,
ClaimType = cl.claim_type,
ClaimStatus = cl.claim_status,
AppealDate = cl.appeal_date
};
gvReport.DataSource = query;
Run Code Online (Sandbox Code Playgroud)
我们通过传入Criteria对象然后通过使用表达式树附加所需条件来构建查询.
IQueryable<Data.Story> query = ctx.DataContext.Stories;
if (criteria.StoryId != null) // StoryId
query = query.Where(row => row.StoryId == criteria.StoryId);
if (criteria.CustomerId != null) // CustomerId
query = query.Where(row => row.Project.CustomerId == criteria.CustomerId);
if (criteria.SortBy != null) // SortBy
query = query.OrderBy(criteria.SortBy + " " + criteria.SortOrder.Value.ToStringForSql());
if (criteria.MaximumRecords != null) // MaximumRecords
query = query.Take(criteria.MaximumRecords.Value);
var data = query.Select(row => StoryInfo.FetchStoryInfo(row));
Run Code Online (Sandbox Code Playgroud)
您还可以访问http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-查看Dynamic Linq库. library.aspx
你可以这样做:
var query = from cl in db.tblClaims
join cs in db.tblCases
on cl.ref_no equals cs.ref_no
where cl.claim_status == "Appeal"
select new
{
Ref = cs.ref_no,
ClaimType = cl.claim_type,
ClaimStatus = cl.claim_status,
AppealDate = cl.appeal_date,
cs.referred_from_lho,
cs.adviser
};
if(!string.IsNullOrEmpty(txtReferedFromDate.Text)
&& !string.IsNullOrEmpty(txtReferedToDate.Text))
query = query.Where(cl =>
cl.appeal_date >= Convert.ToDateTime(txtReferedFromDate.Text)
&& cl.appeal_date <= Convert.ToDateTime(txtReferedToDate.Text));
if(!string.IsNullOrEmpty(dlLHO.Text))
query = query.Where(cl => cl.referred_from_lho == dlLHO.Text);
if(!string.IsNullOrEmpty(dlAdviser.Text))
query = query.Where(cl => cl.adviser == dlAdviser.Text);
gvReport.DataSource =
query.Select(o => new { o.Ref, o.ClaimType, o.ClaimStatus, o.AppealDate });
Run Code Online (Sandbox Code Playgroud)
如果它们具有要过滤的值,则仅将这些字段用作过滤器,否则它们将不会在查询中使用.
| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |