Facebook Sharer
选择您要替换的背景颜色:
【农历新年】背景图片:
个性化设定
 注册  找回密码
查看: 2126|回复: 19
打印 上一主题 下一主题

LINQ的问题

[复制链接]

4

主题

0

好友

476

积分

翡翠长老

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

跳转到指定楼层
1#
发表于 2009-9-17 01:37 AM |只看该作者 |倒序浏览
例如这一段code

public IList<DAL.Salary> GetSalaryByUserAndDate(string UserId, string Month, string Year)
        {
            try
            {
                IList<DAL.Salary> ilSalary = new List<DAL.Salary>();

                // using (HRS2009Entities context = new HRS2009Entities())
                //{
                var query = from S in context.Salary
                            where S.User.UserId == UserId && S.Month == Month && S.Year == Year
                            select S;



                foreach (var SalaryItem in query)
                {
                    ilSalary.Add(SalaryItem);
                }
                //}

                if (ilSalary != null && ilSalary.Count != 0)
                    return ilSalary;
                else
                    return null;
            }
            catch (Exception ex)
            {
                return null;
            }
        }

以上那个query我只能在S.User.UserId == UserId && S.Month == Month && S.Year == Year
才能拿到资料
可是当我多出了其他状况
例如说我现在不要search单独的user我要search month 和 year的时候,或者单单一个month的时候,除了写多一个method之外还有什么办法吗??
还是在一个method里面可以select多个query
请各位前辈帮忙解答,由于我只是linq的入门新手,请多多赐教

我有想过用case可是如果是search by month而已,那么user id 和 year pass回去的资料就是Null了,在linq里面可以成立吗??

[ 本帖最后由 我是大猪头 于 2009-9-17 01:39 AM 编辑 ]




收藏收藏0

13

主题

0

好友

2113

积分

白金长老

Rank: 10

2#
发表于 2009-9-17 01:45 AM |只看该作者
var query = from S in context.Salary
where S.User.UserId.contain(UserId) && S.Month.contain(Month) && S.Year.contiain(Year)
                   select S;
是你要的吗???

select * from salary where userid like '%userid%'

对吗??


回复

使用道具 举报

4

主题

0

好友

476

积分

翡翠长老

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

3#
发表于 2009-9-17 01:56 AM |只看该作者
public class getxxxx method
里面可不可以做多过一个query
例如:
var query = from salary
                     where salary.userid == userid
                      select salary;

var query1 = from salary
                      where salary.userid == userid && salary.month == month
                       select salary;

var query2 = from salary
                        where salary.month == month && salary.year == year
                         select salary;

在一个method里面会依照我不同的状况select不同的query
可是例如第一个var query是没有return month 和 year的话
然后var query1就是search by user id和 month所以没有return year的value
在linq里面可以成立吗??


回复

使用道具 举报

7

主题

1

好友

5108

积分

一流名嘴

Rank: 12Rank: 12Rank: 12

4#
发表于 2009-9-17 01:57 AM |只看该作者
原帖由 我是大猪头 于 2009-9-17 01:37 AM 发表
例如这一段code

public IList GetSalaryByUserAndDate(string UserId, string Month, string Year)
        {
            try
            {
                IList ilSalary = new List();

        ...




不能用 if 來延長  query 的條件值嗎??
如 :

var query = "SELECT * FROM [table] WHERE user_id="+UserId;
if(Month != null)
      query += " AND user_month.contain("+Month+")";


回复

使用道具 举报

13

主题

0

好友

2113

积分

白金长老

Rank: 10

5#
发表于 2009-9-17 02:02 AM |只看该作者
简单

IQueryable<DAL.Salary> Salarys = new IQueryable<DAL.Salary>();
Salarys = null;

if ( condition ){
Salarys  = from salary
                     where salary.userid == userid
                      select salary;
}else if (condition ) {
Salarys  = from salary
                      where salary.userid == userid && salary.month == month
                       select salary;
}else if (condition ) {
Salarys = from salary
                        where salary.month == month && salary.year == year
                         select salary;
}


回复

使用道具 举报

13

主题

0

好友

2113

积分

白金长老

Rank: 10

6#
发表于 2009-9-17 02:04 AM |只看该作者
你 create 一个object 先
把那个object 给于 null 值

后面才fill in 咯

我是用番茄说的 if else if else 来做的


回复

使用道具 举报

4

主题

0

好友

476

积分

翡翠长老

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

7#
发表于 2009-9-17 02:08 AM |只看该作者
原帖由 goodday 于 2009-9-17 02:02 AM 发表
简单

IQueryable Salarys = new IQueryable();
Salarys = null;

if ( condition ){
Salarys  = from salary
                     where salary.userid == userid
                      select sala ...


这个我有想过,可是有人跟我说在LINQ to entities里面不可以
因为在public IList<DAL.Salary> getsalary(string userid, string month,string year)
里面的时候我已经call了这三个variable所以返回的值如果是null的话是不可以成立的
不过那个人也是linq的新手,我也不是很熟,所以我也不懂你这个方法可以不可以


回复

使用道具 举报

13

主题

0

好友

2113

积分

白金长老

Rank: 10

8#
发表于 2009-9-17 02:12 AM |只看该作者
原帖由 我是大猪头 于 2009-9-17 02:08 AM 发表


这个我有想过,可是有人跟我说在LINQ to entities里面不可以
因为在public IList getsalary(string userid, string month,string year)
里面的时候我已经call了这三个variable所以返回的值如果是null的话 ...


你的full code 呢??

我跑到哦


回复

使用道具 举报

4

主题

0

好友

476

积分

翡翠长老

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

9#
发表于 2009-9-17 02:15 AM |只看该作者
public class SalaryBLL
    {
        private HRS2009Entities context;

        public SalaryBLL(HRS2009Entities context)
        {
            this.context = context;
        }

        public IList<DAL.Salary> GetSalaryByUserAndDate(string UserId, string Month, string Year)
        {
            try
            {
                IList<DAL.Salary> ilSalary = new List<DAL.Salary>();

                // using (HRS2009Entities context = new HRS2009Entities())
                //{
                var query = from S in context.Salary
                            where S.User.UserId == UserId && S.Month == Month && S.Year == Year
                            select S;



                foreach (var SalaryItem in query)
                {
                    ilSalary.Add(SalaryItem);
                }
                //}

                if (ilSalary != null && ilSalary.Count != 0)
                    return ilSalary;
                else
                    return null;
            }
            catch (Exception ex)
            {
                return null;
            }
        }




}
请赐教


回复

使用道具 举报

13

主题

0

好友

2113

积分

白金长老

Rank: 10

10#
发表于 2009-9-17 02:20 AM |只看该作者
IList<DAL.Salary> ilSalary = new List<DAL.Salary>();

IList<DAL.Salary> ilSalary = null;


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

JBTALKS.CC |联系我们 |隐私政策 |Share

GMT+8, 2024-7-9 06:35 AM , Processed in 0.104839 second(s), 26 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

Ultra High-performance Dedicated Server powered by iCore Technology Sdn. Bhd.
Domain Registration | Web Hosting | Email Hosting | Forum Hosting | ECShop Hosting | Dedicated Server | Colocation Services
本论坛言论纯属发表者个人意见,与本论坛立场无关
Copyright © 2003-2012 JBTALKS.CC All Rights Reserved
合作联盟网站:
JBTALKS 马来西亚中文论坛 | JBTALKS我的空间 | ICORE TECHNOLOGY SDN. BHD.
回顶部