JBTALKS.CC

标题: LINQ的问题 [打印本页]

作者: 我是大猪头    时间: 2009-9-17 01:37 AM
标题: LINQ的问题
例如这一段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 编辑 ]
作者: goodday    时间: 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%'

对吗??
作者: 我是大猪头    时间: 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里面可以成立吗??
作者: Super-Tomato    时间: 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+")";
作者: goodday    时间: 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;
}
作者: goodday    时间: 2009-9-17 02:04 AM
你 create 一个object 先
把那个object 给于 null 值

后面才fill in 咯

我是用番茄说的 if else if else 来做的
作者: 我是大猪头    时间: 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的新手,我也不是很熟,所以我也不懂你这个方法可以不可以
作者: goodday    时间: 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 呢??

我跑到哦
作者: 我是大猪头    时间: 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;
            }
        }




}
请赐教
作者: goodday    时间: 2009-9-17 02:20 AM
IList<DAL.Salary> ilSalary = new List<DAL.Salary>();

IList<DAL.Salary> ilSalary = null;
作者: goodday    时间: 2009-9-17 02:21 AM
interface 是不用create object 的
作者: 我是大猪头    时间: 2009-9-17 02:23 AM
原帖由 goodday 于 2009-9-17 02:20 AM 发表
IList ilSalary = new List();

IList ilSalary = null;


那我要怎样get资料
作者: goodday    时间: 2009-9-17 02:23 AM
public IList<DAL.Salary> GetSalaryByUserAndDate(string UserId, string Month, string Year)
        {
            try
            {
                iQueryable<DAL.Salary> ilSalary = null;

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



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

                //if (ilSalary != null && ilSalary.Count != 0)
                    return ilSalary;
                //else
                 //   return null;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
试这个
作者: goodday    时间: 2009-9-17 02:25 AM
public IList<DAL.Salary> GetSalaryByUserAndDate(string UserId, string Month, string Year)

public IQueryable<DAL.Salary> GetSalaryByUserAndDate(string UserId, string Month, string Year)
作者: 我是大猪头    时间: 2009-9-17 02:31 AM
Iqueryable
是什么来的??
作者: goodday    时间: 2009-9-17 02:33 AM
能跑吗??

解决你的先 后面才解释
作者: 我是大猪头    时间: 2009-9-17 02:44 AM
原帖由 goodday 于 2009-9-17 02:33 AM 发表
能跑吗??

解决你的先 后面才解释


不能run在
ilSalary.Add(SalaryItem);
这里马上出一个红线给我
还有ilSalary.Count != 0
这里也是
作者: goodday    时间: 2009-9-17 03:12 AM
你直接return 那个 iqueryable<salary>
那两个不用咯
作者: 我是大猪头    时间: 2009-9-17 08:27 AM
试过了,还是不可以
show不出资料
作者: goodday    时间: 2009-9-17 08:38 PM
send 你的code 给我看看





欢迎光临 JBTALKS.CC (https://www.jbtalks.cc/) Powered by Discuz! X2.5